202. Happy Number 快乐数

202. Happy Number 快乐数

n 如果满足各个位数字的平方和重新赋值给 n,循环操作n能为1,则初始的n为快乐数

本题考查对结果循环的检测,应用快慢指针检测环的思想来检测 n 经过多次迭代操作后是否存在循环

Floyd Cycle Detection

class Solution {
public:
    bool isHappy(int n) {
        int fast, slow;
        fast = sum(n);
        slow = n;
        while(fast!=slow) {
            slow = sum(slow); // slow 每次走一步
            fast = sum(fast); // fast 每次走两步
            fast = sum(fast);
        }
        return slow == 1;
    }
    
    int sum(int n) {
        int s=0;
        int tmp;
        while(n) {
            tmp = n%10;
            s += tmp*tmp;
            n/=10;
        }
        return s;
    }
};