题目链接
英文链接:https://leetcode.com/problems/happy-number/
中文链接:https://leetcode-cn.com/problems/happy-number/
题目详述
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
1 | 输入: 19 |
题目详解
- 按照要求进行操作,若是快乐数可以变为 1。
- 若不是快乐数必然存在一个循环节。
- 判断是否存在环即可。
- 可以运用 HashSet。
1 | public class LeetCode_00202 { |
- 判断是否存在环还可以运用 Floyd’s cycle detection。
- LeetCode142-环形链表II、LeetCode287-寻找重复数 等都是这个思想的具体应用。
1 | public class LeetCode_00202 { |
- 根据数学定义,不是快乐数的数被定义为不快乐数。
- 在计算过程中,不快乐数最后都会进入
4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4
的循环中。 - 据此,如果我们发现计算过程中出现了数字 4 就说明是一个不快乐数。
1 | public class LeetCode_00202 { |
- 循环节
4 → 16 → 37 → 58 → 89 → 145 → 42 → 20
的长度为 8,最多可以操作 7 次。 - 说明在验证是否是快乐数的过程中,若发现操作次数达到了 7 次,一定不是快乐数。
- 快乐数在不超过 7 次操作过程中会变为 1。
1 | public class LeetCode_00202 { |