202. 快乐数(LeetCode)

题目描述


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

「快乐数」定义为:

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

示例 1:

输入:19

输出:true

解释:

1^2 + 9^2 = 82

8^2 + 2^2 = 68

6^2 + 8^2 = 100

1^2 + 0^2 + 0^2 = 1

提示:

1 <= n <= 2^31 - 1

条件分析


  1. 只要结果不为1,且出现了无限循环则代表不符合条件;

解题思路(查找表)


  1. 可以定义一个set用来存储之前已经出现的结果;
  2. 如果结果不为1,且出现重复,返回false,否则一直循环下去;

编码如下

public boolean isHappy(int n) {
    if (n == 1) {
        return true;
    }
    Set<Integer> happendedNum = new HashSet<>();
    while (true) {
        if (happendedNum.contains(n)) {
            return false;
        } else {
            happendedNum.add(n);
        }
        n = newN(n);
        if (n == 1) {
            return true;
        }
    }
}

private int newN(int n) {
    int result = 0;
    int mod = 0;
    while(n != 0) {
        mod = n % 10;
        result += mod * mod;
        n = n / 10;
    }
    return result;
}
posted @ 2021-07-14 20:38  咸与维新  阅读(146)  评论(0)    收藏  举报