题目描述:
标签:哈希表 数字
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 true ;不是,则返回 false 。
代码:
思路分析:
1、这里要注意的真假判断条件——无限循环意味着相加又出现之前的和,就会在一个圈里无限循环
2、所以我们需要一个set来存储之前的和,每次求得的和都去看看set里面有没有,如果有就返回false,没有的话就等到sum=1返回true
class Solution {
public boolean isHappy(int n) {
Set<Integer> set = new HashSet<>();
while(true){
int sum = getSum(n);
if(sum == 1){
return true;
}
if(set.contains(sum)){
return false;
}else{
set.add(sum);
}
n = sum;
}
}
public int getSum(int n){
int sum = 0;
while(n > 0){
sum += (n%10)*(n%10);
n = n / 10;
}
return sum;
}
}