
解题思路:输入的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;
}
};
博客围绕力扣(LeetCode)题目展开,指出输入的n最终有变为1循环或构成非1环两种情况。采用快慢指针方法解决问题,当找到环时,判断指针值是否为1,若不是则该数不是快乐数。
538

被折叠的 条评论
为什么被折叠?



