bool isHappy(int n) {
//Leetcode202:快乐数
int slow = n;
int fast = getNext(n);
while((fast!=1)&&(slow!=fast)){
slow = getNext(slow);
fast = getNext(getNext(fast));
}
return (fast==1);
}
int getNext(int num){
int totalSum = 0;
while(num>0){
int rev = num%10;
totalSum = totalSum + rev*rev;
num= num/10;
}
return totalSum;
}
快乐数
【题目描述】
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
【思路】
这题可以转换为判断链表中是否有环
可以用快慢指针
写一个辅助的函数 getNext() 求出相应数的下一个循环
如果为1 结束循环
如果不为1 则继续 直到快慢指针相遇
由于一些有的没的的原因
这个数的迭代是不会趋向无限大的 所以只会进入循环 或者到1
不需要处理数增加到无限大的情况
可以参考官网的解释
😀