leetcode刷题 day9 | 哈希表:有效的字母异位词+两个数组的交集+快乐数

知识点


题目


  1. 有效的字母异位词
  • 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
    注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
  • 示例:
    输入: s = “anagram”, t = “nagaram”
    输出: true

解法①

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        record=[0]*26
        n,m=len(s),len(t)
        for i in range(n):
            record[ord(s[i])-ord('a')]+=1
        for j in range(m):
            record[ord(t[j])-ord('a')]-=1

        for i in range(26):
            if record[i]!=0:
                return False

        return True

解法②

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        from collections import defaultdict 
        s_dict = defaultdict(int)
        t_dict = defaultdict(int)
        
        for x in s:
            s_dict[x] += 1
        for x in t:
            t_dict[x] += 1
            
        return s_dict == t_dict
  1. 两个数组的交集
  • 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
  • 示例:
    输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    输出:[9,4]
    解释:[4,9] 也是可通过的

解法①

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        return list(set(nums1) & set(nums2))

解法②

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        result=set()
        record=[0]*1001
        for num in nums1:
            record[num]=1
        for num in nums2:
            if record[num]==1:
                result.add(num)
        return list(result)
  1. 两个数组的交集 II
  • 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。
  • 示例:
    输入:nums1 = [1,2,2,1], nums2 = [2,2]
    输出:[2,2]
    解法:
class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        result=[]
        from collections import defaultdict
        record=defaultdict(int)
        for i in nums1:
            record[i]+=1
        for j in nums2:
            if record[j]>0:
                result.append(j)
                record[j]-=1
        return result

  1. 快乐数
  • 编写一个算法来判断一个数 n 是不是快乐数。
    「快乐数」 定义为:
    对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
    然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
    如果这个过程 结果为 1,那么这个数就是快乐数。
    如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
  • 示例:
    输入:n = 19
    输出:true
    解释:
    12 + 92 = 82
    82 + 22 = 68
    62 + 82 = 100
    12 + 02 + 02 = 1
class Solution:
    def isHappy(self, n: int) -> bool:
        result=set()
        def calculate(num):
            sum_=0

            while num:
                sum_+=(num%10)**2
                num =num//10
            return sum_

        while True:
            n=calculate(n)
            if n==1:
                return True
            if n not in result:
                result.add(n)
            else:
                return False
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值