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 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  咸与维新  阅读(167)  评论(0)    收藏  举报