差点想要用递归去做···还好臭臭告诉我了···
题目的意思是,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;
}
};