0
点赞
收藏
分享

微信扫一扫

【LeeCode】202. 快乐数

金穗_ec4b 2023-01-08 阅读 122

【题目描述】

编写一个算法来判断一个数 ​​n​​ 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 ​​n​​ 是 快乐数 就返回 ​​true​​​ ;不是,则返回 ​​false​​ 。


【示例】

【LeeCode】202. 快乐数_Math

​​【代码】官方​​

正如我在【admin】里面说的一样, n的各位数进行平方后可能进入一个循环, 所以我们需要一个set保留中间结果。

【LeeCode】202. 快乐数_Math_02

package com.company;
// 2023-1-8

import java.util.HashSet;
import java.util.Set;

class Solution {
private int getNext(int n) {
int total = 0;
while (n > 0){
int d = n % 10;
n = n / 10;
total += d * d;
}
return total;
}
public boolean isHappy(int n) {
Set<Integer> seen = new HashSet<>();
while (n != 1 && !seen.contains(n)){
seen.add(n);
n = getNext(n);
}
return n == 1;
}
}
public class Test {
public static void main(String[] args) {
new Solution().isHappy(19); // 输出: true
new Solution().isHappy(7); // 输出: true
new Solution().isHappy(2); // 输出: false
new Solution().isHappy(1111111); // 输出: true
}
}

【代码】admin

通过率: 403/402  卡在了"1111"上, 因为这个叠加出来后的值是7, double后又回到大于10的场景了

不研究了, 研究一下大神的模板

package com.company;
// 2023-1-7

class Solution {
public boolean isHappy(int n) {
if (n < 1 ) return false;
// 这里有些数, double后悔进入到
while (n >= 2 && n <= 9){
int tmp = 0;
tmp += Math.pow(n % 10, 2);
n = tmp;
}


while ( n >=10 ){
int tmp = 0;
while (n > 0){
tmp += Math.pow(n % 10, 2);
n = n / 10;
}
n = tmp;
}
return n == 1;
}
}
public class Test {
public static void main(String[] args) {
new Solution().isHappy(19); // 输出: true
new Solution().isHappy(7); // 输出: true
new Solution().isHappy(2); // 输出: false
new Solution().isHappy(1111111); // 输出: true
}
}


举报

相关推荐

0 条评论