题目:
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/happy-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
python3 解答
内存消耗:13.9 MB
1、想了一下,里面的列表推导式,可以省略掉,会减少一部分内存;
2、递归调用,比较耗时,采用while循环,会减少运行时间;
class Solution:
def __init__(self):
self.__set = set()
def isHappy(self, n: int) -> bool:
str_num = str(n)
if n not in self.__set:
self.__set.add(n)
else:
return False
num = sum([int(_)**2 for _ in str_num])
print(num)
if num == 1:
return True
else:
print(str_num, n, 2222)
return self.isHappy(num)
优化后:
内存消耗:13.5 MB
class Solution:
def __init__(self):
self.__set = set()
def isHappy(self, n: int) -> bool:
if n not in self.__set:
self.__set.add(n)
else:
return False
num = 0
for _ in str(n):
num += int(_)**2
if num == 1:
return True
else:
return self.isHappy(num)
当然,还等有厉害的回答: 是从0-10以内寻找规律,只有4才能无限循环下去。(不是我想到的...)
class Solution:
def isHappy(self, n: int) -> bool:
while True:
n = sum(int(i) ** 2 for i in str(n))
if n == 4:
return False
if n == 1:
return True