242.有效字母的异位词
这里的主要思想是 数组其实就是一个简单哈希表 这里是来查询某个元素是否存在 这里主要是特别利用了ord()这个函数,把 字符串和列表中的下标对应
class Solution: def isAnagram(self, s: str, t: str) -> bool: record = [0] * 26 for i in s: # 遍历第一个字符串的每一个字 record[ord(i) - ord("a")] += 1 # ord 是序列 例如 ord(i) i = a 那么ord("a") - ord("a") = 0 正好对应 record 的第一个位置 也就是 "a" 字符有多少个 for i in t: record[ord(i) - ord("a")] -= 1 # 同上 只不过是剪掉 for i in range(26): if record[i] != 0: # 有一个元素不是0 就说明不完全一样 return False return True
349.两个数组的交集
因为题目里说明的是 交集 而获得的交集是不需要重复的 所以可以用set,set就有去重功能,还顺带排了序.
这个是字典的办法, 哈希表也可以看作是一个字典的形式 也就是 每个值 下标是key,对应的value 就是下标对应的值
class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: # 使用哈希表存储一个数组中的所有元素 table = {} for num in nums1: table[num] = table.get(num, 0) + 1 # 使用集合存储结果 res = set() for num in nums2: if num in table: res.add(num) del table[num] return list(res)
使用set的方法 超简单
直接把两个列表用set函数调用一下 ,随后使用交集就好了 感觉属于是有点作弊了(并不 你学会了调用set的方法 和 & 的作用)
class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: return list(set(nums1) & set(nums2))
202.快乐数
这个是集合的解法,换句话说 是字面意义解问题 利用了set
class Solution: def isHappy(self, n: int) -> bool: record = set() #创建一个空集合 准备塞东西 while True: # 永远循环 n = self.get_sum(n) #计算n if n == 1: #快乐数条件 题目目标 return True # 如果中间结果重复出现,说明陷入死循环了,该数不是快乐数 if n in record: # 出现重复就说明会一直循环了 return False else: record.add(n) #记录这次的 sum 值后的数 def get_sum(self,n: int) -> int: # 制作get_sum函数 new_num = 0 #默认是0 while n: n, r = divmod(n, 10) # divmod 是返回两个值 一个是shang new_num += r ** 2 # 计算下一个sum 获得n return new_num
1.两数之和
经典第一题 万恶之源(不是)
最简单的方法就是挨个遍历 双循环 O(n^2)
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)): for j in range(i+1, len(nums)): if nums[i] + nums[j] == target: return [i,j]
但是既然今天都是哈希表 那么可以用哈希表做
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: records = dict() # 创建一个字典 用来承接key 和 value key是原 nums 这个list 里的值, value 是下标 for index, value in enumerate(nums): #遍历nums if target - value in records: # 遍历当前元素,并在map中寻找是否有匹配的key return [records[target- value], index] records[value] = index # 如果没找到匹配对,就把访问过的元素和下标加入到map中 return [] # 代表不存在