编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直 到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。 【样例输入】 32 【样例输出】 yes 【样例输入】 37 【样例输出】 no
时间: 2023-06-19 08:06:10 浏览: 188
leetcode202-leetcode202:202.快乐数写一个算法来判断一个数n是否快乐。快乐数字是由以下过程定义的数字:从任何正整数开
可以使用快慢指针的思想来解决这个问题。快指针每次计算两次平方和,慢指针每次计算一次平方和,如果存在循环,快指针一定会追上慢指针。如果最终平方和为1,那么这个数就是快乐数,否则不是。
以下是Python实现:
```python
def is_happy_number(num):
def get_next(num):
# 计算下一个平方和
total_sum = 0
while num > 0:
num, digit = divmod(num, 10)
total_sum += digit ** 2
return total_sum
slow = num
fast = get_next(num)
while fast != 1 and slow != fast:
slow = get_next(slow)
fast = get_next(get_next(fast))
return fast == 1
```
测试:
```python
print(is_happy_number(32)) # 输出 True
print(is_happy_number(37)) # 输出 False
```
阅读全文