本题需要实现两个功能,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;
}
}