题目
思路
先模拟出所有的情况


根据情况1和情况2发现,无论哪种情况,都能成环,只是一个是环里都是1,一个是环里不为1,所以这里仅需判断能否成环,然后再判断环里是否为1 即可判断出快乐数

读者可能出现的错误写法
cpp
class Solution {
public:
int bitSum(int n)
{
int sum = 0;
while(n)
{
int t = n%10;
sum += t*t;
n=n/10;
}
return sum;
}
bool isHappy(int n) {
int slow = n;
int fast = n;
while(slow != fast)
{
slow = bitSum(slow);
fast = bitSum(bitSum(fast));
}
return slow == 1;
}
};
这里的fast不能初始化成n,因为初始化成n循环就进不去了,应该是初始化成n的下一位,也就是bitSum(n);
正确写法
cpp
class Solution {
public:
int bitSum(int n)
{
int sum = 0;
while(n)
{
int t = n%10;
sum += t*t;
n=n/10;
}
return sum;
}
bool isHappy(int n) {
int slow = n;
int fast = bitSum(n);
while(slow != fast)
{
slow = bitSum(slow);
fast = bitSum(bitSum(fast));
}
return slow == 1;
}
};