1. 程式人生 > 其它 >【LeetCode】258. Add Digits 各位相加(Easy)(JAVA)

【LeetCode】258. Add Digits 各位相加(Easy)(JAVA)

技術標籤:Leetcodeleetcodejava演算法面試資料結構

【LeetCode】258. Add Digits 各位相加(Easy)(JAVA)

題目地址: https://leetcode.com/problems/add-digits/

題目描述:

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

Example:

Input: 38
Output: 2 
Explanation: The process is like: 3 + 8 = 11, 1 + 1 = 2. 
            Since 2 has only one digit, return it.

Follow up:
Could you do it without any loop/recursion in O(1) runtime?

題目大意

給定一個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數。

進階:
你可以不使用迴圈或者遞迴,且在 O(1) 時間複雜度內解決這個問題嗎?

解題方法

  1. 如果把陣列 num 各位數拆分: num = 100x + 10y + z = 99x + 9y + (x + y + z)
  2. 最後的 x + y + z 就是把各位數相加的結果,如果 x + y + z 已經是小於 10 了,那麼 x + y + z 就是結果了。如果還是大於 10 的話,繼續迴圈直到小於 0 為止
  3. 所以把 num % 9 就可以得到 x + y + z,至於為什麼要先 -1 再 + 1呢?比如 x + y + z 等於 9,9 % 9 = 0,所以必須 (9 - 1) % + 1 這樣計算
class Solution {
    public int addDigits(int num) {
        return (num - 1) % 9 + 1;
    }
}

執行耗時:1 ms,擊敗了100.00% 的Java使用者
記憶體消耗:35.4 MB,擊敗了88.10% 的Java使用者

歡迎關注我的公眾號,LeetCode 每日一題更新