
问题:
- 如何计算每个位置数字的平方和?
答:n % 10得到个位,再除以10得到新的n,重复步骤,直到n=0
- 无限循环怎么判断?
答:将每次平方和的结果存储到set集合中,若出现过不会重复添加
- 快乐数是平方和为1就可以了吗?
答:yes,一旦有一次平方和为1,那么接下来无限循环为1
- 什么情况不是快乐数?
答:记录平方和重复的那个数字,若不为1,则不是快乐数
- 平方和一定会无限循环吗?
答:不一定,但是只要重复出现了一次,就一定会无限循环了
代码:
class Solution {
public boolean isHappy(int n) {
Set<Integer> record = new HashSet<>();
while(n != 1 && !record.contains(n)){
record.add(n);
n = sumresult(n);
}
return n == 1;
}
public int sumresult(int n) {
int sum = 0;
while(n>0) {
int tmp = n % 10;
sum += tmp * tmp;
n = n/10;
}
return sum;
}
}