实质:检查是否有循环
1、循环遍历
class Solution:
def isHappy(self, n: int) -> bool:
# 记录,以防止循环
m = set()
res = n
while res>1: # 主体
n = res
res = 0
if n in m: # 检测是否循环
return False
else:
m.add(n)
while n>0: # 计算和
res += (n%10)**2
n = n//10
if res == 1:
return True
return False
2、快慢指针 类似:环形链表 https://blog.csdn.net/mxxxkuku/article/details/115364860
class Solution:
def isHappy(self, n: int) -> bool:
# 快慢指针,检查是否循环
def get_next(n):
res = 0
while n>0: # 计算和
res += (n%10)**2
n = n//10
return res
slow = n
fast = get_next(n)
while fast !=1 and fast!=slow:
slow = get_next(slow)
fast = get_next(get_next(fast))
return fast==1