题目描述
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。 来源:力扣(LeetCode) 链接:leetcode.cn/problems/ha…
解法
- 题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。
所以这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。
-
判断sum是否重复出现就可以使用unordered_set。
-
还有一个难点就是求和的过程
int getSum(int n){
int a, sum = 0;
while(n>0){
a = n%10;
sum += a*a;
n = n/10;
}
return sum;
}
代码
class Solution {
public:
bool isHappy(int n) {
unordered_set<int> sum_set = {0};
int sum;
while(1){
sum = getSum(n);
if (sum == 1) {
return true;
}
if(sum_set.find(sum)!=sum_set.end()){
return false;
}else{
sum_set.insert(sum);
n = sum;
}
}
return true;
}
int getSum(int n){
int a, sum = 0;
while(n>0){
a = n%10;
sum += a*a;
n = n/10;
}
return sum;
}
};