如题:
首先要明白什么是快乐数,
举例1:以19为例:
12+92=82
82+22=68
62+82=100
12+02+02=1
最终结果为1,则19为快乐数
举例2:以85为例:
82+52=89
82+92=125
12+22+52=30
32+02=9
92=81
82+12=65
62+52=61
62+12=37
32+72=58
52+82=89
重复出现循环,85此数不快乐。
思路:利用哈希表保存计算过的数,一直循环取个位数的平方和计算,如果遇到过之前见过的数且非1,说明不快乐,返回false。否则如果计算出来和为1说明乐疯了,返回true。
代码如下:
class Solution {
public:
int countnum(int n){//用于计算分离数字平方和
int sum=0;
while(n){
sum+=(n%10)*(n%10);
n/=10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int>set;
int sum=0;
while(1){
sum=countnum(n);
if(sum==1) return true;//判断和是否为1;
if(set.find(sum)!=set.end()) return false;//如果sum出现过,说明陷入循环,不为快乐数
else set.insert(sum);//未出现则存入哈希表中
n=sum;//更新n的值为此次sum值,进入下一此循环
}
}
};
以上完毕。