万事开头难
第一步:考虑如何计算 n 每一位的平方和
第二步:关键词 “无限循环”,考虑哈希表。该题提示 n 小于等于2,147,483,647,所以 n每一位的平方和最大为810,范围不大。
定义sum来存储平方和,当sum等于一则return true,当哈希表重复则return false;
static int get_num(int n){
int sum = 0;
while(n){
sum += (n%10)*(n%10);
n /= 10;
}
return sum;
}
bool isHappy(int n){
int hash[1000] = {0};
int sum = get_num(n);
while(sum != 1){
if(hash[sum] == 1)
return false;
else
hash[sum]++;
sum = get_num(sum);
}
return true;
}