编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
- 如果这个过程 结果为 1,那么这个数就是快乐数。
- 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
一. 思路
其实这里我们知道怎么判断这个数是不是快乐数,但是在判断什么数不是快乐数会陷入迷茫。
思路:所有非快乐数都会陷入某种循环,回到之前的某个数中
二.代码
public static boolean isHappy(int n) {
Set<Integer> allNum=new HashSet<>();
//如果变成之前的数,说明陷入循环了,肯定不是快乐数
while (n!=1){
String sn = String.valueOf(n);
int sum=0;
for (int i = 0; i < sn.length(); i++) {
int curNum=sn.charAt(i)-'0';
sum+=curNum*curNum;
}
if (sum==1){
return true;
}
//如果之前的加和结果已经出现过了,说明陷入了循环之中了
if (allNum.contains(sum)){
return false;
}else {
//记录出现过的加和结果
allNum.add(sum);
}
n=sum;
}
return true;
}