递归方法
class Solution {
public:
bool isHappy(int n) {
int sum=0;
if (n0)
return false;
while(n!=0)
{
sum+=(n%10)*(n%10);
n=n/10;
}
if (sum1)
return true;
else if (sum==4) //4是一个死循环,要把这个破除掉,不看测试用例想不到
return false;
else
return isHappy(sum);
}
};
不建议使用递归方法,快慢指针来破除死循环
“快指针”每次走两步,“慢指针”每次走一步,当二者相等时,即为一个循环周期
快慢指针方法
class Solution {
public:
int bitSquareSum(int n) {
int sum = 0;
while(n > 0)
{
int bit = n % 10;
sum += bit * bit;
n = n / 10;
}
return sum;
}
bool isHappy(int n) {
int slow = n, fast = n;
do{
slow = bitSquareSum(slow);
fast = bitSquareSum(fast);
fast = bitSquareSum(fast);
}while(slow != fast);
return slow == 1;
}
};