您的位置:首页 > 移动开发

leedcode 每日一题 202. Happy Number

2016-03-11 15:44 489 查看
差点想要用递归去做···还好臭臭告诉我了···

题目的意思是,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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: