1. 程式人生 > >LeetCode--258--各位相加*

LeetCode--258--各位相加*

給定 -- style 由於 type 返回 col div 整數

問題描述:

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

示例:

輸入: 38
輸出: 2 
解釋: 各位相加的過程為3 + 8 = 11, 1 + 1 = 2。 由於 2 是一位數,所以返回 2。

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

方法1:

 1 class Solution(object):
 2     def addDigits(self, num):
 3         """
 4         :type num: int
 5         :rtype: int
 6         """
7 num_list = [] 8 if num // 10 == 0: 9 return num 10 num_list = self.jisuan(num,num_list) 11 while len(num_list) != 1: 12 res = 0 13 for i in num_list: 14 res += i 15 num_list = self.jisuan(res,[]) 16 return
res 17 def jisuan(self,num,num_list):#把[38]變成[3,8] 18 while num !=0: 19 g = num %10 20 num = num // 10 21 num_list.append(g) 22 return num_list

官方:amazing

1 class Solution(object):
2     def addDigits(self, num):
3         """
4         :type num: int
5 :rtype: int 6 """ 7 s = num % 9 8 return s if num==0 or s!=0 else 9

官方2:

1 class Solution(object):
2     def addDigits(self, num):
3         a = str(num)
4         while len(a)-1:
5             a = sum([int(i) for i in str(a)])
6             a = str(a)
7         return int(a)

2018-09-22 16:56:58

LeetCode--258--各位相加*