如果直接写会发现一个问题,当数字不是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;
}
};
本文介绍了一种使用哈希表优化解决数字循环问题的方法,通过避免重复计算,有效防止了死循环的发生。详细解释了算法实现过程,并提供了一个C++类Solution的实例,展示了如何通过set容器和find()函数来判断是否为快乐数。
671

被折叠的 条评论
为什么被折叠?



