由题意可知:一个数重复进行逐位平方和运算,都会陷入循环,1循环的N即为Happy数。
因此,即可以对N进行各位平方和运算,得到的结果重复该步骤。同时检测,平方和结果是否为1以及是否在之前的计算结果中出现过。
class Solution {
public:
bool isHappy(int n) {
// vector<int> table; //动态数组,但是没法进行按键赋值操作
unordered_map<int,bool> table; //第一个参数为键值类型,第二个操作为属性值类型
int sum=n,flag=0;
while(sum!=1)
{
int res=0;
while(sum!=0)
{
res+=(sum%10)*(sum%10);
sum/=10;
}
sum=res;
if(table[res]==1)
{
flag=1;
break; //陷入循环,退出
}
else
{
table[sum]=1; //若未出现过,进行标记
}
}
if(flag)
return false;
else
return true;
}
};