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,且出现了无限循环则代表不符合条件;
解题思路(查找表)
- 可以定义一个set用来存储之前已经出现的结果;
- 如果结果不为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;
}
浙公网安备 33010602011771号