class Solution {
public:
bool isHappy(int n) {
unordered_set<int>num;
while(n!=1&&num.find(n)==num.end()){
num.insert(n);
int sum=0;
while(n>0){
int a=n%10;
sum+=a*a;
n/=10;
}
n=sum;
}
if(n==1){
return true;
}
return false;
}
};
创建一个unordered_set类型的变量num。当n不等于0且n不在num的范围中时进入吧外层循环,将n插入num中,定义一个变量sum用来存储n的各个位的和,将sum赋值为0。当n>0时,进入内层循环, 定义一个变量a用来存储n的各位上的数字,sum等于各位上的数字的平方,将去掉各位上的数字赋值给n,跳出内层循环。 将sum赋值给n。跳出外层循环。如果n等于1,返回true,否则返回false。
class Solution {
public:
int getsum(int n){
int sum=0;
while(n>0){
int a=n%10;
sum+=a*a;
n=n/10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int>nums;
while(1){
int sum=getsum(n);
if(sum==1){
return true;
}
if(nums.find(sum)==nums.end()){
nums.insert(sum);
n=sum;
}
else{
return false;
}
}
}
};
定义一个子函数,接受整型参数n。定义一个int类型的变量sum,赋值为0。当a大于0时进入循环。定义一个变量a,用来存储n的个位。将个位数字的平方储存到sum中。将去掉个位数的数字赋值给n。跳出循环,返回sum。创立一个主函数,声明一个无序集合nums。建立一个无限循环。调用子函数并将其储存在sum中。如果sum等于一,则返回true。如果sum在nums中未找到,则将sum插入nums中。将sum赋值给n。否则返回false。跳出循环。