判断一个数是否为快乐数,快乐数的定义是:对一个数的每一位计算平方并求和,得到一个新的数,不断重复该操作,直到得到一个循环,若循环得到数字1,则该数为快乐数。
需要一个hash表,记录一下之前出现过的元素,如果出现过,并且没有得到1,输出false。
想法很简单,但是代码没有这么写,因为样例比较水,就申请了10w的数组,就能过样例了,但是为了严谨一点,学习了一下C++11的 unordered_set ,并了解一下与set、map、unordered_map的区别。
set是一个集合,map是一个键值对的数组。这两者都是使用红黑树实现的,内部是有序的,unordered_set和unordered_map,使用hash表实现的,内部无序。
class Solution {
public:
/**
* @param n an integer
* @return true if this is a happy number or false
*/
int count(int n){
int ans = 0;
while(n!=0){
ans += (n%10)*(n%10);
n = n/10;
}
return ans;
}
bool isHappy(int n) {
unordered_set<int> s;
std::unordered_set<int>::iterator it;
while(n!=1){
it = s.find(n);
if (it != s.end() )
return false;
else
s.insert(n);
s.insert(n);
n = count(n);
}
return true;
// Write your code here
}
};