题目
思路
自己的思路:
1、首先要将给定的数字按照每位数分开
2、其次要考虑一位数,两位数的,以及多位数的情况,按照这种考虑,那。。。
3、然后就没有了然后,已经歪了。
leetcode思路回顾:
利用set集合元素不能重复的特点,将每次计算的结果放到一个Set集合里并且检测该元素是否已经存在,这个计算结果有两种情况,要么归为1,此时为“快乐数”,要么无限循环,此时不为“快乐数”。
代码
class Solution {
//用来计算下一个进入计算的数,取数字每一位数的方法比较经典
//对10取模后取的是个位数,然后在除以10,再次取模,取得就是十位数,
//依次类推
public int getNext(int n){
int sum = 0;
while(n >0){
int temp = n % 10;
n = n /10;
sum += temp * temp ;
}
return sum;
}
//用来检测是否为快乐数,终止循环的条件就是返回1,此时为快乐数,
//返回set集合已经存在的元素,此时不为快乐数;
public boolean isHappy(int n){
Set<Integer> set = new HashSet<>();
while(n !=1 && !set.contains(n)){
set.add(n);
n = getNext(n);
}
return n == 1;
}
}