算法刷题记录.leetcode202.快乐数

83 阅读1分钟

题目描述

编写一个算法来判断一个数 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;

}

};