leetcode:https://leetcode-cn.com/problems/happy-number/
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 true ;不是,则返回 false
示例 1:
输入:19
输出:true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
示例 2:
输入:n = 2
输出:false
思路:
可以使用集合set的方式,可以去重,每次计算一个值,存储到set集合中,使用一个函数计算每次的和,如果存在,就说明集合存在计算的值,已经陷入了循环之中。
class Solution {
public:
bool isHappy(int n) {
//去除n==1
if(n==1){
return true;
}
//使用set的目的就是排除其中已经重复的部分,防止重复性的循环变量n
unordered_set<int> result;
result.emplace(n);
while(n!=1){
n=theSum(n);
if(result.find(n)!=result.end())
{
return false;
}
result.emplace(n);
}
return true;
}
int theSum(int n){
int sum=0;
while(n){
sum=sum+(n%10)*(n%10);
n=n/10;
}
return sum;
}
};