原谅我是个数学渣渣,幸好有甜姨的解析,结论就是迭代所得的数字必然是收敛的
由此便得到了2种可能情况
(1) 收敛为1
(2) 迭代结果出现环,无法收敛
看到这两个图其实我们就想到了之前做的题目,判断链表是否存在环,用的办法是佛洛依德算法,快慢指针判断,
于是我们这里也可以用快慢指针来实现
class Solution { public boolean isHappy(int n) { int slow=n,fast = squareSum(n); while(slow!=fast){ slow = squareSum(slow); fast = squareSum(squareSum(fast)); } return slow==1; } public int squareSum(int n){ int sum=0; while(n>0){ int temp=n%10; sum+=temp*temp; n=n/10; } return sum; } }