以题目中给的例子为例
每一个数字都对应着唯一一个转化后的数字,如同一个链表。现在可以把1这个结点看作NULL。问题也就转化为了是否可以走到NULL。即判断链表中是否有环,有环的话就走不到NULL,也就不是快乐数,无环的话则可以走到NULL,也就是快乐数。
class Solution {
public:
int getNext(int x)//用于往后走
{
int y=0,d;
while(x)
{
d=x%10;
y=y+(d*d);
x=x/10;
}
return y;
}
bool isHappy(int n) {
//以下便是判断是否有环
int fast=n,slow=n;
while(fast!=1&&getNext(fast)!=1)
{
slow=getNext(slow);
fast=getNext(getNext(fast));
if(slow==fast)
{
return false;//有环则不是快乐数
}
}
return true;//无环则是快乐数
}
};