思路:先要得出每次的总和吧,那就写个函数吧getsum,还是用unordered_set去重。
知识点:主要是if (set.find(sum) != set.end()) ,这句,这句是通过比较 set.find(sum)
返回的迭代器与 set.end()
,可以确定 sum
是否存在于集合中。如果两者不相等,意味着 sum
存在于集合中;如果两者相等,意味着 sum
不存在于集合中。如果sum在集合里了,那就是会一直循环循环循环,直接返回false,如果相等再把sum给insert进去,重复此操作直到等于1。
题解c++:
class Solution {
public:
int getsum(int n)
{
int sum=0;
while(n)
{
sum+=(n%10)*(n%10);
n/=10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int> result;
while(1)
{
int sum=getsum(n);
if(sum==1)
{
return true;
}
if(result.find(sum)!=result.end())
return false;
else
{
result.insert(sum);
}
n=sum;
}
}
};