使用哈希表记录已经出现过的值,如果该值已经出现,说明有循环,则不会等于1,不是快乐数
- 记住求每一位平方和的方法
- 哈希表的大小设置为731
int getSum(int n) {
int sum = 0;
while (n) {
sum += (n % 10)*(n % 10);
n /= 10;
}
return sum;
}
bool isHappy(int n) {
int sum = 0;
/* n <= 2^31 - 1 = 2147483648
** 1999999999的每一位平方和为:1 + 81 * 9 = 730
*/
int hash[731] = {0};
sum = getSum(n);
while (sum != 1) {
hash[sum]++;
sum = getSum(sum);
if (hash[sum] != 0) {
return false;
}
}
return true;
}