好吧,到底哪裡快樂我也不知道。這依舊是一個非常簡單的題目。
可以分成三個步驟:
1.分切數字
2.數字平方和
3.判斷為1,否則回到步驟1.
要是碰到無限循環怎麼辦?把出現的數字記錄下來,只要有數字重複出現那就是無限循環。
用一個 memo ,字典或是集合(set),之後用 in 就能看出是否有重複出現過。
還有更偷機的做法,就是把False的數字回收進memo。這樣會相當Happy。
class Solution: def isHappy(self, n: int) -> bool: memo = {2: False, 3: False, 4: False, 5: False, 6: False, 8: False, 9: False, 11: False, 12: False, 14: False, 15: False, 16: False, 17: False, 18: False, 20: False, 21: False, 22: False, 24: False, 25: False, 26: False, 27: False, 29: False, 30: False, 33: False, 34: False, 35: False, 36: False, 37: False, 38: False, 39: False, 40: False, 41: False, 42: False, 43: False, 45: False, 46: False, 47: False, 48: False, 50: False, 51: False, 52: False, 53: False, 54: False, 55: False, 56: False, 57: False, 58: False, 59: False, 60: False, 61: False, 62: False, 63: False, 64: False, 65: False, 66: False, 67: False, 69: False, 71: False, 72: False, 73: False, 74: False, 75: False, 76: False, 77: False, 78: False, 80: False, 81: False, 83: False, 84: False, 85: False, 87: False, 88: False, 89: False, 90: False, 92: False, 93: False, 95: False, 96: False, 98: False, 99: False, 106: False, 113: False, 117: False, 128: False, 145: False, 162: False} if n in memo: return False num2 = 0 while n>1: if n in memo: return False else: memo[n]=None while n>0: num2 += (n % 10)**2 n = n//10 n, num2 = num2, 0 return True如果用字典是比較容易去偷機,如果不偷機,用集合會比較好增加資料(可以少打幾個字)。
class Solution: def isHappy(self, n: int) -> bool: memo = {*''} num2 = 0 while n>1: if n in memo: return False else: memo.add(n) while n>0: num2 += (n % 10)**2 n = n//10 n, num2 = num2, 0 return True