代码随想录打卡(6)—— 哈希表(collections.defaultdict)

力扣242. 有效的字母异位词

接触过哈希表做起来很简单,跟之前不同的是需要判断次数,引入了新的collections.defaultdict()的使用方法,避免再存入相同键值时报错。详见Python中的defaultdict方法_yealxxy的博客-CSDN博客_python defaultdict

class Solution:
    import collections # 引入defaultdict方法判断次数
    def isAnagram(self, s: str, t: str) -> bool:
        dic_s = defaultdict(int) # 当有多个相同字母(键)时,导致KeyError异常
        dic_t = defaultdict(int) # 注意使用方法,定义值类型
        for i in s:
            dic_s[i] += 1
        for j in t:
            dic_t[j] += 1
        
        return dic_s == dic_t
        

力扣349.两个数组的交集

很简单,一种是利用set写法,另一种是查询到相同值从字典中删去该值,下次访问到不会重复。

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        dic1 = {}
        same_set = set()
        for i in nums1:
            dic1[i] = 1
        
        for j in nums2:
            if j in dic1.keys(): # 判断是否存在键
                same_set.add(j)

        return list(same_set)
        

力扣202.快乐数

主要考点为判断死循环,其余是提取数字的不同位数,偏易。

class Solution:
    def isHappy(self, n: int) -> bool:
        # 由于可能陷入无限循环,为了判断是否已经进入过循环,利用集合或哈希表存入每次结果
        dic = dict()
        
        def cal_happy(num): # 计算和判断是否重复
            sum_ = 0
            while num: 
                sum_ += (num % 10) ** 2 # 计算个位数平方
                num = num // 10 # 地板除移至高位,为0则终止
            return sum_
            
        # 利用集合记录每次结果,也可用哈希表判断键值是否存在
        record = set()
        while True:
            n = cal_happy(n)  # 平方和替换
            if n == 1:
                return True
            # 如果中间结果重复出现,说明陷入死循环了,该数不是快乐数
            if n in record:
                return False
            else:
                record.add(n)
        

            

力扣1.两数之和

同样也可以用

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        target_set = []
        for i in range(len(nums)):
            for j in range(i+1,len(nums)):
                tem = nums[i] + nums[j]
                if tem == target:
                    target_set = [i,j]
                    return target_set
                else:
                    continue
                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值