
本题需要实现两个功能,1.给定一个数n,通过快乐数的规则返回新的数n*。2.判断是否有重复的数,若有则说明在快乐数的规则下,这个数n最终会形成循环不断循环。
因此,使用HashSet来放n及其在快乐数规则下的新数n*,若有重复,说明进入了循环,此数n不为快乐数。
getNext() 方法刚开始看的时候有点绕,后来好了,之后要自己实现。
class Solution {
public boolean isHappy(int n) {
Set<Integer> seen = new HashSet<>();
while (n != 1 && !seen.contains(n)) {
seen.add(n);
n = getNext(n);
}
return n == 1;
}
private int getNext(int n) {
int totalSum = 0;
while (n > 0) {
int d = n % 10;
n = n / 10;
totalSum += d * d;
}
return totalSum;
}
}
本文介绍了一种算法,用于判断一个整数是否为快乐数。通过不断将该数替换为它每个位数的平方和,如果这个过程最终能够得到1,则该数为快乐数;若循环出现已计算过的数,则说明进入无限循环,该数不是快乐数。采用HashSet记录过程中出现的所有数值以检测循环。
1160

被折叠的 条评论
为什么被折叠?



