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