什么是快乐数?
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。
class Solution {
public:
//定义一个方法用来获取一个数n的每个位数上的平方和
int getn(int n)
{
int sum = 0;
while(n!=0)
{
sum+=(n%10)*(n%10);
n=n/10;
}
return sum; //返回的sum即为各位数上的平方和
}
//定义一个判断是否是快乐数的方法
bool isHappy(int n) {
unordered_set<int>set; //定义集合
while(1) //注意:这里是无条件进入循环,因为后面会一直调用上面的getn()函数,直到找到或找不到快乐数为止
{
int sum = getn(n); //先获取到各位数的平方和
if(sum==1)
{
return true; //若sum为1,则为快乐数
}
if(set.find(sum)!=set.end()) //若查找的sum值在之前就出现过,说明sum重复出现,直接return false
{
return false;
}
else
{
set.insert(sum); //否则将该sum放进set集合中,用于接下来的循环判断
}
n = sum; //给n赋值,再次调用getn()函数获取此时的新sum值
}
}
};