思路:用一个set记录是否重复出现过某值,是 则是无限循环,不可能还有1的情况,直接返回false; 否则一直处理生产新的数,直到为1;
class Solution {
public boolean isHappy(int n) {
//set记录是否重复出现过某值,是 则是无限循环,直接返回false;
HashSet<Integer> set = new HashSet();
while(!set.contains(n)) {
set.add(n);//每次新的数加到set去
n = prcessNewSum(n);
//新数如果造出来是1,则返回是快乐数
if(n==1){
return true;
}
}
return false;
}
//处理新数的函数
private int prcessNewSum(int n) {
int newSum = 0; //待返回的新数
while(n>0) {
int yush = n%10; //每轮的余数
newSum += yush * yush;
n = n/10;
}
return newSum;
}
}