leedcode 每日一题 202. Happy Number

来源:互联网 发布:内网管控软件 编辑:程序博客网 时间:2024/05/20 07:59


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

 题目的意思是,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
原创粉丝点击