LeetCode:(Python) Happy Number

許博淳
數據共筆
Published in
Mar 30, 2023

題目連結: 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)

但不能跑,我還需要一些時間偵錯 . . .

參考他人解法

解法連結:https://leetcode.com/problems/happy-number/solutions/2383810/very-easy-0-ms-100-fully-explained-c-java-python-js-c-python3/?orderBy=hot&languageTags=python

實作程式碼

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

--

--