如果直接写会发现一个问题,当数字不是happy number 时会陷入死循环。有个trick ,如果有重复就不是happy number , 所以需要用一个哈希表去存算过之后的数,如果重复跳出循环。
这里可以用到set容器去存,find()能找出这个数的index,如果不在set中返回end()。
class Solution {
public:
bool isHappy(int n) {
set<int> s;
while(n!=1){
n=getsum(n);
if(s.find(n)!=s.end()){
return 0;
n=1;
}
s.insert(n);
}
return 1;
}
int getsum(int n){
int sum=0;
while(n){
sum=(n%10)*(n%10)+sum;
n=n/10;
}
return sum;
}
};