本文已参与「新人创作礼」活动,一起开启掘金创作之路。
202. 快乐数
- 题号:力扣202
- 知识点:哈希
- 总结 题干:
思路:
- 1.这个题的难点是无限循环时的处理,如何在无限循环时退出程序。
- 2.无限循环说明sum的值重复出现过,这样就好处理了。使用一个unordered_set集合来判断sum是否重复出现。
- 3.如果sum重复出现了,则为false
- 4.如果sum为1了,则为true
class Solution {
public:
// 计算sum
int getSum(int n){
int sum = 0;
while(n){
sum += (n%10) * (n%10);
n = n/10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int> sum_set;
int sum = getSum(n);
// 无限循环
while (1){
// sum==1,是快乐数,返回true
if(sum == 1){
return true;
}
// sum重复出现过,也就是无限循环,返回false
if(sum_set.find(sum) != sum_set.end()){
return false;
}
// 集合中没有当前的这个sum,就把当前的这个sum加入到集合中
// 并再求sum的各位的平方和得到新的sum
else{
sum_set.insert(sum);
sum = getSum(sum);
}
}
}
};