【LeetCode】258. Add Digits 各位相加(Easy)(JAVA)
阿新 • • 發佈:2020-12-09
技術標籤: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) 時間複雜度內解決這個問題嗎?
解題方法
- 如果把陣列 num 各位數拆分: num = 100x + 10y + z = 99x + 9y + (x + y + z)
- 最後的 x + y + z 就是把各位數相加的結果,如果 x + y + z 已經是小於 10 了,那麼 x + y + z 就是結果了。如果還是大於 10 的話,繼續迴圈直到小於 0 為止
- 所以把 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使用者