第一题 https://leetcode.cn/problems/valid-anagram/description/
简单 可以用26位数组模拟哈希表
python
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
if len(s) != len(t):
return False
map = [0] * 26
for i in range(len(s)):
map[ord(s[i]) - ord('a')] += 1
map[ord(t[i]) - ord('a')] -= 1
if self.allZero(map):
return True
else:
return False
def allZero(self, list):
for char in list:
if char != 0:
return False
return True
第二题 https://leetcode.cn/problems/intersection-of-two-arrays/description/ 求交集
python
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
return list(set(nums1) & set(nums2))
python是强大,一行就写完了 https://leetcode.cn/problems/intersection-of-two-arrays-ii/description/
这个是进阶版本的题目
python
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
# 统计两个数组中每个数字出现的次数
cnt1 = Counter(nums1) # 例如:nums1=[1,2,2,3] -> Counter({2: 2, 1: 1, 3: 1})
cnt2 = Counter(nums2) # 例如:nums2=[2,2,3] -> Counter({2: 2, 3: 1})
# & 运算取交集,保留较小计数
inter = cnt1 & cnt2 # 结果:Counter({2: 2, 3: 1})
# 解释:数字 2 在两个数组中都有,出现次数取较小值 2
# 数字 3 在两个数组中都有,出现次数取较小值 1
ans = []
# 将结果展开成列表
for num, freq in inter.items():
ans.extend([num] * freq) # 例如:[2] * 2 = [2, 2]
return ans # 返回:[2, 2, 3]
注意append和extend的区别
第三题 快乐数 https://leetcode.cn/problems/happy-number/
python
class Solution:
def isHappy(self, n: int) -> bool:
seen = set()
while n != 1 and n not in seen:
seen.add(n)
n = sum(int(dight) ** 2 for dight in str(n))
return n == 1
有可能陷入无限循环,从这受启发应该用set
第四题 https://leetcode.cn/problems/two-sum/ 力扣第一题,学过哈希表的话应该还是很明显能想到用哈希表
python
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
map = {}
for i in range(len(nums)):
if target - nums[i] in map:
return [map.get(target - nums[i]), i]
map[nums[i]] = i
return None