題目連結: https://leetcode.com/problems/happy-number/
題意說明:
將數字中的個位數平方+十位數平方+...後會獲得新數字,不斷重複
如果最後獲得1,return True
如果最後陷入循環,return False
初始想法
- 用遞迴撰寫,每個回合都把數字拆解再結合
- 要有一個 list儲存出現過的數字
- 如果數字出現過,代表陷入循環,return False
- 如果數字 = 1,return True
- 其他情況就進入下一個回合
class Solution:
def isHappy(self, n: int) -> bool:
exist_num = [n]
def check(n):
seperate_str = list(str(n))
seperate_num = list(map(lambda x: int(x),seperate_str))
merge_num = sum(list(map(lambda x:x**2,seperate_num)))
if merge_num in exist_num:
return False
else:
exist_num.append(merge_num)
if merge_num == 1:
return True
check(merge_num)
return check(n)
但不能跑,我還需要一些時間偵錯 . . .
參考他人解法
實作程式碼
class Solution:
def isHappy(self, n: int) -> bool:
exist_num = list()
while n != 1:
seperate_str = list(str(n))
seperate_num = list(map(lambda x: int(x),seperate_str))
n = sum(list(map(lambda x:x**2,seperate_num)))
#上面三行也可以簡化為下面一行
#n = sum([int(num)**2 for num in str(n)])
if n in exist_num:
return False
else:
exist_num.append(n)
return True