1. 题目解析
根据题目我们知道,快乐数的定义是对一个数进行将其各位数的平方和相加后的操作,将此操作定义为 F ,如果在若干次 F 后最终返回值为 1 ,则称该数为快乐数,反之则不是快乐数
2. 算法原理
本题用到的算法原理是双指针,那么在对整数进行操作时双指针如何进行运用呢,这里需要引入一个概念就是,将一个数进行若干次 F 后,其一定会有重复的数字出现,即在不断的 F 后会形成一个由整数组成的环,那么这时的双指针就是环中的数字,其中快指针走两步就代表 F 进行两次,相应的慢指针走一步就代表 F 进行一次,关于为何一定会形成一个环,下面用一个图来解释
3. 代码实现
class Solution {
public:
//求出一个数的各位数平方和
int bitSum(int n)
{
int sum = 0;
while(n)
{
int t = n % 10;
sum += t * t;
n = n / 10;
}
return sum;
}
bool isHappy(int n)
{
int fast = bitSum(n);
int slow = n;
while(slow != fast)
{
fast = bitSum(bitSum(fast));
slow = bitSum(slow);
}
return slow == 1;
}
};