使用的数据结构:unordered_map(unordered_map与map的区别请参见上一篇博文)
解题思路:定义一个unordered_map变量,在该变量中查找,n,如果键值n对应的value为0,则将键值n对应的value加1,后面的操作为:把n的各个位上的数字平方求和,得到一个新的n。如果不为0,说明之前已经出现过了,后面做的操作是一个循环操作,也就是说,n不是一个happy number,返回false。重复以上操作,直到n=1或者返回false跳出循环。
源码附上:
class Solution {
public:
bool isHappy(int n) {
unordered_map<int,int> tmp;
while(n!=1)
{
if(tmp[n]==0)
tmp[n]++;
else
return false;
int sum=0;
while(n!=0)
{
sum+=pow(n%10,2);
n=n/10;
}
n=sum;
}
return true;
}
};