题目描述:判断一个数是否为happy数,如19为happy数:
解题思路:我们首先看一个不是happy数的例子,如11:
可以看到,此时4又出现了,那么会一直陷入这样的循环中,不会出现1,所以判断一个数是否为happy数只要将这个数的各个数位的数平方相加,若出现过的相加和没有重复且最后出现了1,那么这个数字就是happy数,否则不是。
C++实现如下:
class Solution {
public:
bool isHappy(int n)
{
set<int> data; //存储出现过的数
while(!data.count(n)) //若这个数没出现过则循环,count用来统计n的数量
{
data.insert(n);
int sum = 0;
while(n)
{
sum = sum + (n % 10) * (n % 10); //求出这一次出现的数sum
n = n / 10;
}
if(sum == 1) //如果sum为1,则返回true
return true;
n = sum; //令n=sum,若n没有出现过,则继续循环;若n出现过,则返回false
}
return false;
}
};