力扣:202快乐数(哈希表解法)

如题:

力扣:202快乐数(哈希表解法)_第1张图片

首先要明白什么是快乐数,

举例1:以19为例:

12+92=82

82+22=68

62+82=100

12+02+02=1

最终结果为1,则19为快乐数

举例2:以85为例:

82+52=89

82+92=125

12+22+52=30

32+02=9

92=81

82+12=65

62+52=61

62+12=37

32+72=58

52+82=89

重复出现循环,85此数不快乐。

思路:利用哈希表保存计算过的数,一直循环取个位数的平方和计算,如果遇到过之前见过的数且非1,说明不快乐,返回false。否则如果计算出来和为1说明乐疯了,返回true。

代码如下:

class Solution {
public:
int countnum(int n){//用于计算分离数字平方和
    int sum=0;
    while(n){
        sum+=(n%10)*(n%10);
        n/=10;
    }
    return sum;
}
    bool isHappy(int n) {
        unordered_setset;
        int sum=0;
        while(1){
        sum=countnum(n);
        if(sum==1) return true;//判断和是否为1;
        if(set.find(sum)!=set.end()) return false;//如果sum出现过,说明陷入循环,不为快乐数
        else set.insert(sum);//未出现则存入哈希表中
        n=sum;//更新n的值为此次sum值,进入下一此循环
        }
    }
};

以上完毕。

你可能感兴趣的:(leetcode,哈希算法,c++,算法)