解法一
思路
看了一下题目主要还是检测集合中有没有某个数存在。简单算了一下,n的范围是2^31-1,10位数,假设每位都为9,第一次算出的平方和最大810,故设置了一个1000的数组做哈希表。
外层循环判断算出的平方和是不是存在过的,若存在过,即进入无限循环,即不为快乐数。
内层循环求平方和。
代码
class Solution {
public boolean isHappy(int n) {
int[] hash = new int [1000];
int sum = 0;
while(sum!=1){
sum = 0;
while(n>0){
sum += (n%10) * (n%10);
n=n/10;
}
if(hash[sum]!=0){
return false;
}
hash[sum]++;
n = sum;
}
return true;
}
}
思考
第一版的sum求和过程算式写错了,sum和n也忘记重新赋值了。
解法二
代码
class Solution {
public boolean isHappy(int n) {
Set<Integer> record = new HashSet<>();
while (n != 1 && !record.contains(n)) {
record.add(n);
n = getNextNumber(n);
}
return n == 1;
}
private int getNextNumber(int n) {
int res = 0;
while (n > 0) {
int temp = n % 10;
res += temp * temp;
n = n / 10;
}
return res;
}
}
思考
(代码随想录题解)大致思路和我自己写的差不多,区别是用了HashSet做哈希表,用set.contains()的bool结果做判断,稍微简洁一些
1048

被折叠的 条评论
为什么被折叠?



