这题的意思是,输入一个数,来判断这个数是不是快乐数。这里快乐数(Happy Number)的定义为:对该数字的所有数位都求平方和,得到的新数再次求所有数位的平方和,如此重复,最后结果为1。
如19就是个快乐数:
对于快乐数,最后计算一定会收敛到1。但是非快乐数就不会收敛,而是会从一个数开始陷入循环。所以这边使用一个容器来存储中间出现过的数,一旦后面再出现,就证明这个数不是快乐数,这样就不会陷入死循环。代码如下:
class Solution {
public:
bool isHappy(int n) {
if(n<1)
{
return false;
}
vector<int> nums;
nums.push_back(n);
while(1)
{
int sum=0;
while(n)
{
sum+=pow(n%10,2);
n/=10;
}
if(sum==1)
{
return true;
}
if(find(nums.begin(),nums.end(),sum)!=nums.end())
{
return false;
}
nums.push_back(sum);
n=sum;
}
}
};