跳到主要内容

202. 快乐数(Easy)

题目描述

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

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

样例

Input:19
Output:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

题解

和上题的 142. 环形链表 II(Medium) 一样的思路,就是 龟兔算法 的另一个场景,目的是 Cycle Detect。

Python示例

class Solution:
def isHappy(self, n: int) -> bool:
def f(x):
s = 0
while x:
s += (x % 10) ** 2
x = x // 10
return s

slow = f(n)
fast = f(f(n))
while fast != 1 and fast != slow:
fast = f(f(fast))
slow = f(slow)
return fast == 1

Go 示例

func f(x int) int {
s := 0
for x != 0 {
s = s + (x % 10) * (x % 10)
x = x / 10
}
return s
}

func isHappy(n int) bool {
slow := f(n)
fast := f(f(n))
for fast != 1 && slow != fast {
slow = f(slow)
fast = f(f(fast))
}
return fast == 1
}