题目
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环
但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。
思路
只要出现重复的和,说明一定存在一个循环,比如数字AB计算平方和得到了结果CD,再继续经过一系列计算后,CD又得到了CD,所以会一直循环下去。
即可以使用哈希法的思想
- 每次计算平方和后,都去检查是否在哈希集合中
- 不在的话则添加到哈希集中
- 在的话说明存在一个循环,return false
java代码
class Solution{
public boolean isHappy(int n){
Set<Integer> record = new HashSet<>();//创建一个哈希集合
while(n != 1 && !record.contains(n)){//只要和不是1并且哈希集合中无重复,则加入哈希集合
record.add(n);
n = getNextNumber(n);//迭代计算下一个平方和
}
return n == 1;// 在boolean时可以进行 return n == 1;相当于 n==1 是一个判断语句,这样的语句如果满足条件最终n等于1,会返回true;否则n就会大于1,返回false
}
public int getNextNumber(int n){
int sum = 0;
while(n != 0){//因为1/10 = 0
int temp = n % 10;
sum += temp*temp;
n /=10;
}
return sum;
}
}