leedcode 每日一题 202. Happy Number


 差点想要用递归去做···还好臭臭告诉我了···

 题目的意思是,19的每一位平方加和之后,再继续,最后如果得到1,则是happy数。

 在做这道题之前有个误区,就是觉得,怎么判断这个数不是happy数呢?如果不是,它一定是个循环,但是循环其实是有一个开始的,

 比如4,它一直在循环,但是并不一定返回4,而之前我认为需要返回4才可以判断false。

 事后证明需要比较过程中出现的每个数是否出现过两次。于是用到了set

unordered_set<int> mySet;

 mySet.insert(n);

if(mySet.count(n)>0) return false;

主要用到这三句


//count(value)返回set对象内元素值为value的元素个数



class Solution {
public:
    bool isHappy(int n) {
        unordered_set<int> mySet;
        while(true){
            if(n==1) return true;
            if(mySet.count(n)>0) return false;
            mySet.insert(n); //insert在判断count之后,因为一开始插入之后,会影响count结果
            n=addnum(n);
        }
    }
    int addnum(int n){
        int tmp; int cnt=0;
        while(n!=0){
            tmp=n%10;
            cnt+=tmp*tmp;
            n=n/10;
        }
        return cnt;
    }
};


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值