题目:判断一个数是否是高兴数:将其每位平方之和做为新值直至为1。
分析:新值的获取比较简单,模10取余得到每位。但有个问题就是可能陷入循环,而不得结果。这种情况也需要返回false。所以需要将出现的数记录下来。可以用哈希表记录。也可以用数组记录。因为10*9^2也才810.所以开一个1000的数组也可以轻松记录。
答案:
class Solution {
public:
bool isHappy(int n) {
if (n == 1)
return true;
if (n < 1)
return false;
unordered_set<int> showedList;
while (1)
{
int next_n = 0;
while(n)
{
int t_digit = n%10;
next_n += t_digit*t_digit;
n /= 10;
}
if (next_n == 1)
return true;
if (showedList.find(next_n) == showedList.end())
showedList.insert(next_n);
else
return false;
n = next_n;
}
}
};
注意:掌握
unordered_set的查找、插入、删除等用法。