202. 快乐数

 

 

原谅我是个数学渣渣,幸好有甜姨的解析,结论就是迭代所得的数字必然是收敛的

 

 

 

由此便得到了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;
    }
}

 

posted @ 2021-04-21 10:16  jchen104  阅读(43)  评论(0编辑  收藏  举报