202. 快乐数

202. 快乐数_第1张图片
重点是和面试官说如果进入环了,证明这个数不是快乐数,因为这个数字不会无限扩大,在扩大后会缩小,而判环的操作就是快慢指针。如果快慢指针相等了,就判断当前指针是否为1,如果不为1证明进入环了,return false、
用hash也可以判断是否出现重复的数字了

class Solution {
public:
    int helper(int n){
        int tmp = 0;
        while(n != 0){
            tmp += pow(n%10,2);
            n/=10;
        }
        return tmp;
    }
    bool isHappy(int n) {
        //可以一直循环直到找到1,但是怎么判断找不到?
        //快慢指针找是否有环,如果这个环是1,那么就是true,如果快慢指针相等时是一个乱七八糟的数,就证明已经是一个环了
        int slow = n, fast = helper(n);
        while(slow != fast){
            slow = helper(slow);
            fast = helper(helper(fast));
        }
        return slow == 1;
    }
};

你可能感兴趣的:(leetcode,leetcode,算法)