第一眼就想着用递归,需要重新写一个方法来实现获取n的各个位数的平方和,递归的是这个方法,刚开始搞晕了直接饶了一大圈,然后利用哈希表记录每一次平方和的值(只需要记录键就行,值直接填个常量),如果值再次出现说明出现了死循环,直接false,最终当平方和==1时,return true;
public int getNum(int n){
int sum=0,n1=0;
while(n!=0){
n1=n%10;
n=n/10;
sum=sum+n1*n1;
}
return sum;
}
public boolean isHappy(int n) {
Map hashMap = new HashMap<Integer,Integer>();
while (n != 1) {
if(hashMap.get(n)!=null)return false;
hashMap.put(n,1);
n= getNum(n);
}
return true;
}