题意:
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
解法:
发现问题主要为判断迭代过程中是否存在循环节,
开map记录一下迭代过程中变成的数,判断是否重复遇到即可.
code:
class Solution {
public:
bool isHappy(int n) {
map<int,int>mp;
while(n!=1){
mp[n]=1;
int x=n;
int sum=0;
while(x){
int t=x%10;
x/=10;
sum+=t*t;
}
n=sum;
if(mp[n])return 0;
}
return 1;
}
};