快乐数
1.解法
题目中说了会无限循环,那么也就是说求和的过程中,sum会重复出现。然后就会联想到判断一个元素是否在集合中出现过的方法,就会联想到哈希。
所以这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。
代码如下:
def isHappy(n):
def calcu(m): # 每次循环需要计算各位平方和
sum = 0
while m != 0:
num = m % 10
sum += (int)(pow(num,2))
m = m // 10
return sum
s = set() # 记录已经出现过的数,因为数没有范围,所以用set
while True:
n = calcu(n)
if n==1: # 如果n为1
return True
if n in s: # 如果n在s中,证明已经循环了一遍了,发现没有1,以后再怎样循环都不会出现1了
return False
else: # 如果n不在s中,则添加到s中
s.add(n)
2.总结
python
-
各种容器的初始化:
集合:set() 、列表:[]或者list()、字典:{}或者dict()
-
python中判断一个元素是否在容器中的方法:
if element in collections
-
set添加元素:set.add()
算法
- 一般看到判断一个元素是否在集合中出现过就会联想到哈希
- 如果哈希值大小没有范围,就会联想到用set或者map