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

如题:

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

举例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_set<int>set;
        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值,进入下一此循环
        }
    }
};

以上完毕。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值