算法_哈希表_快乐数

快乐数

leetcode链接

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

  1. 各种容器的初始化:

    集合:set() 、列表:[]或者list()、字典:{}或者dict()

  2. python中判断一个元素是否在容器中的方法:

    if element in collections

  3. set添加元素:set.add()

算法

  1. 一般看到判断一个元素是否在集合中出现过就会联想到哈希
  2. 如果哈希值大小没有范围,就会联想到用set或者map
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值