由题意可知:一个数重复进行逐位平方和运算,都会陷入循环,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;
}
};
本文介绍了一种用于判断Happy数的有效算法。通过不断计算一个整数各个位上的数字平方和,并检查该过程是否会陷入循环或最终变为1来确定该数是否为Happy数。使用C++实现并借助unordered_map数据结构来跟踪计算过程中出现过的数值。
767

被折叠的 条评论
为什么被折叠?



