今天你快乐吗不快乐就来数一数快乐数吧!
①此题可以看作环链表问题、用快慢指针思想去解决
②因为我们可以把1看成NULL,如果为NULL,则不是环链表。
③如果不为1,则就会进行无限循环,直到循环到两个数相等为止,通过观察我们可以发现,两个数肯定会相等的,所以就不是死循环!
int getNext(int x){//这个函数很明显,获得两个数平方相加后的值
int z=0;
while(x){
z += (x%10) * (x%10);
x = x/10;
}
return z;
}
bool isHappy(int n){//快慢指针思想
int p = n, pr = getNext(n);
while(pr != 1 && p!=pr){//当我们遇到1,就相当于链表中的NULL时就退出,判断我们这个值是否为1
//当我们两个数值相等时也退出,然后进行判断是否为1,若为1则true,否则false
p = getNext(p);//相当于慢指针
pr = getNext(getNext(pr));//相当于快指针,一次跳两个
}
return pr == 1;
}