LeetCode.202 快乐数

时间:2023-01-20 16:56:54

1.题目

编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:

对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。

然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。

如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。



2.代码

class Solution {
public boolean isHappy(int n) {
//定义一个哈希表,储存不断更新的n
Set<Integer> set = new HashSet<>();
//当n不等于1和这个数不在集合里面的时候就进入循环
while(n!=1 && !set.contains(n)){//注意不在集合里的写法
set.add(n);//把这个数添加到集合里
n = getNextNumber(n);//然后调用方法改变n的值,不断更新n再不断判断循环里的条件

}
return n==1;//这个很好,就是可以返回true也可以是false

}
//此方法用来不断更新n的值
//就是计算一个数的每个位数的平方和
public int getNextNumber(int n){
int sum=0;
while(n>0){//注意条件
int temp = n%10;//取模,如19就得到9
sum+=temp*temp;//直接求9的平方
n=n/10;//然后再去掉最后一位数,此时还会判断是否大于0,是的话就继续进入循环,继续累加
}
return sum;
}
}