★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-xmehjfmu-ma.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
Given a non-negative integer num
, repeatedly add all its digits until the result has only one digit.git
Example:github
Input: Output: 2 Explanation: The process is like: , . Since has only one digit, return it. 383 + 8 = 111 + 1 = 22
Follow up:
Could you do it without any loop/recursion in O(1) runtime?微信
給定一個非負整數 num
,反覆將各個位上的數字相加,直到結果爲一位數。app
示例:oop
輸入: 輸出: 2 解釋: 各位相加的過程爲:, 。 因爲 是一位數,因此返回 2。 383 + 8 = 111 + 1 = 22
進階:
你能夠不使用循環或者遞歸,且在 O(1) 時間複雜度內解決這個問題嗎?spa
20mscode
1 class Solution { 2 func addDigits(_ num: Int) -> Int { 3 return (num - 1)%9 + 1 4 } 5 }
24mshtm
1 class Solution { 2 func addDigits(_ num: Int) -> Int { 3 var num = num 4 5 while num >= 10 { 6 var x = 0 7 while num > 0 { 8 x += num % 10 9 num /= 10 10 } 11 num = x 12 } 13 14 return num 15 } 16 }
24msblog
1 class Solution { 2 3 func addDigits(_ num: Int) -> Int { 4 guard num > 9 else { return num } 5 6 var digits = [Int]() 7 var number = num 8 9 while true { 10 digits.removeAll() 11 12 while number > 0 { 13 digits.append(number % 10) 14 number /= 10 15 } 16 17 if digits.count > 1 { 18 number = digits.reduce(0, +) 19 } else { 20 number = digits.first ?? 0 21 break 22 } 23 } 24 25 return number 26 } 27 }