202.快乐数
难度:简单
题目:
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
- 如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 true ;不是,则返回 false 。
提示:
- 1 <= n <= 2^31 - 1
示例:
示例 1:
输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
示例 2:
输入:n = 2
输出:false
分析
这道题我们只需要按要求进行模拟即可,但这里需要注意也许这个数永远也不会是快乐数。
那么我们就需要在计算的过程中,将每次结果保存在一个hashset中,以保证本次计算的结果未在历史的运算过程中出现过。
在这里提供两种模拟方式。
- 字符串模拟:通过字符串的匹配进行计算
- 数学模拟:通过divmod循环计算
字符串解题
class Solution:
def isHappy(self, n):
all_set = set()
while n not in all_set:
all_set.add(n)
tmp = sum((map(lambda x: int(x) ** 2, str(n))))
if tmp == 1:
return True
n = tmp
return False
数学解题:
class Solution:
def isHappy(self, n: int) -> bool:
all_set = set()
while n not in all_set:
all_set.add(n)
tmp = 0
while n:
n,mod = divmod(n,10)
tmp += mod ** 2
if tmp == 1:
return True
n = tmp
return False
欢迎关注我的公众号: 清风Python,带你每日学习Python算法刷题的同时,了解更多python小知识。
有喜欢力扣刷题的小伙伴可以加我微信(King_Uranus)互相鼓励,共同进步,一起玩转超级码力!
我的个人博客:https://qingfengpython.cn