代码随想录 | 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

目录

242.有效的字母异位词

题目链接:

题目描述:

解题思路:

排序法:

哈希法:

代码:

排序法:

哈希法:

349. 两个数组的交集

题目链接:

题目描述:

解题思路:

暴力法:

哈希法:

集合法:

代码:

哈希法:

集合法:

202. 快乐数

题目链接:

题目描述:

解题思路:

代码:

 1. 两数之和 

题目链接:

题目描述:

解题思路:

代码:


242.有效的字母异位词

题目链接:

242. 有效的字母异位词 - 力扣(LeetCode)

题目描述:

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

解题思路:

排序法:

使用sort排序后,对比每一位是否相同。

哈希法:

使用额外的空间存放哈希表 [0]*26,先遍历一个字符串,将其中字母出现次数记录在哈希表中 ord(i)-ord('a'),再遍历下一个字符串,将其中出现的字符次数在哈希表中-1。最后判断哈希表是否全为0,若为0则返回True ,若不为False。

代码:

排序法:

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        s = list(s)
        s.sort()
        t = list(t)
        t.sort()
        sizes = len(s)
        sizet = len(t)
        if sizes != sizet:
            return False
        else:
            for i in range(sizes):
                if s[i] != t[i]:
                    return False
            else:
                return True

哈希法:

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        nums_s = [0] * 26
        for i in s:
            nums_s[ord(i) - ord('a')] += 1
        for i in t:
            nums_s[ord(i) - ord('a')] -= 1
        if nums_s == [0] * 26:
            return True
        else:
            return False

349. 两个数组的交集

题目链接:

349. 两个数组的交集 - 力扣(LeetCode)

题目描述:

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

解题思路:

暴力法:

双层for循环,这里就不展开讲了。

哈希法:

使用列表储存nums1中元素是否出现,与nums2中对比,若在nums2中也有出现,则使用集合(防止记录出现的元素。

集合法:

直接解出来,但不了解底层逻辑的不建议使用。

代码:

哈希法:

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        nums = [0] * 1001
        res = set()
        for i in nums1:
            nums[i] = 1
        for i in nums2:
            if nums[i] == 1:
                res.add(i)
        return list(res)

集合法:

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

202. 快乐数

题目链接:

202. 快乐数 - 力扣(LeetCode)

题目描述:

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

解题思路:

哈希法:

使用集合储存每次计算出的的平方和,

若平方和为1,则返回True。

并使用新计算出的平方和与之对比(if sum in record),若在集合中,则说明是死循环,返回False。

代码:

class Solution:
    def isHappy(self, n: int) -> bool:
        record = set()
        while True:
            sum = 0
            while n:
                n, r = divmod(n, 10)
                r = r**2
                sum += r
            n = sum
            if sum == 1:
                return True
            if sum in record:
                return False
            else:
                record.add(sum)

 1. 两数之和 

题目链接:

1. 两数之和 - 力扣(LeetCode)

题目描述:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

解题思路:

哈希法:

使用一个字典储存已经遍历过的元素,并在遍历数组的时候,只需要向字典查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进字典中,因为字典存放的就是我们访问过的元素。

代码:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        records = dict()

        for index, value in enumerate(nums):  
            if target - value in records:   # 遍历当前元素,并在map中寻找是否有匹配的key
                return [records[target- value], index]
            records[value] = index    # 如果没找到匹配对,就把访问过的元素和下标加入到map中
        return []

  • 56
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值