JAVA版本
本题有一个难点是如何完成数的循环过程。
解法一:
暴力解法
该解法是笔者唯一能想出来的方法。
class Solution {
public boolean isHappy(int n) {
for (int i =0;i<100;i++){
int ans = 0; //易错点1.将ans写在循环外面
while(n>0){
ans += (n%10) * (n%10); //易错点2:忘记写+号
n /=10;
}
n =ans;
if(n ==1){
return true;
}
}
return false;
}
}
思路是将一个数循环一百次,看看这100次当中是否能出现1,如果不能出现就不是快乐数。
解法二:
使用hash表,利用Set集合,因为如果不是开心数的话,他会进入一个循环当中,这一轮数字会不断的重复出现,所以我们利用Set的不可重复性,来完成。
class Solution {
public boolean isHappy(int n) {
Set<Integer> set = new HashSet<Integer>();
while(n != 1 && !set.contains(n)){
set.add(n);
int ans =0;
while(n >0) { //完成循环的过程,较重要。
ans += (n%10) * (n %10);
n /=10;
}
n =ans;
}
if (n ==1){
return true;
}else{
return false;
}
}
}