题目解析
Leetcode 202.快乐数
看完题目描述相信大家已经知晓题目的含义,我们通过一张图再剖析一下题目含义
快乐数或者非快乐数都是可以成环的,这个是数学上已经证明了的。所以这道题的最后含义就是分辨出环中全部是1或者全部没有1的
双指针
成环问题我们在做链表的时候也是使用的双指针,这里我们通过画图看到系列问题的解决方法。定义两个“指针”,每一次这两个指针不断挪动不同的步数。我们知道,在环里面的指针一定会有相遇位置,所以我们通过判断这个相遇节点是否是1就完成了本道LeetCode
代码编写
class Solution {
public:
//相当于指针往后面移动一步
int BitSum(int num)
{
int ret = 0;
while(num)
{
ret += pow(num % 10, 2);
num /= 10;
}
return ret;
}
bool isHappy(int n) {
int slow = n;
int fast = BitSum(n);
while(fast != slow)
{
slow = BitSum(slow);
fast = BitSum(BitSum(fast));
}
//走到这里,说明一定是相遇了,判断就是了
if(fast == 1)return true;
return false;
}
};