解题思路:输入的n最终要么会变为1一直在循环,要么会构成一个不会变为1的环,因此利用快慢指针很好地解决这个问题,当找到环时,看他们两个的值是不是1如果不是就不是快乐数
class Solution {
public:
//计算各个位上的平方和
int sum(int n)
{
int sum =0;
while(n)
{
int t= n%10;
sum+=t*t;
n/=10;
}
return sum;
}
bool isHappy(int n) {
//利用快慢指针
int slow=n;
//这里快指针要指向下一个元素否则下面的while循环进不去
int fast=sum(n);
while(slow!=fast)
{
slow=sum(slow);
fast=sum(sum(fast));
}
if(slow==1)
{
return true;
}
return false;
}
};