242.有效的字母异位词
思路 :
1.利用哈希表,记录str1出现 元素及频次
2.遍历str2,依次减去哈希表中记录的频次
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
if len(s) != len(t):
return False
hash = [0] * 26
for i in s:
hash[ord(i) - ord('a')] += 1
for j in t:
hash[ord(j) - ord('a')] -= 1
for item in hash:
if item != 0:
return False
return True
349.两个数组的交集
思路:
1.记录nums1中出现元素
2.遍历nums2,若在nums1中出现则加入res
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
numdict = dict()
res = []
for ch in nums1:
numdict[ch] = 1
# 自己写的思路:在遍历nums2并累计,再遍历numdict找频次大于1的值对应索引加入res
# for ch2 in nums2:
# if ch2 in numdict:
# numdict[ch2] += 1
# for k,v in numdict.items():
# if v > 1:
# res.append(k)
for ch2 in nums2:
if ch2 in numdict.keys() and numdict[ch2] ==1:
res.append(ch2)
numdict[ch2] = 0
return res
202.快乐数
「快乐数」 定义为:
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
- 如果这个过程 结果为 1,那么这个数就是快乐数。
思路:
1.根据题意,不断重复操作,数可能变为 1,也可能是无限循环。
2.可以用哈希表来存储为一位生成的数,每次判断该数是否存在于哈希表中。如果已经出现在哈希表里,则说明进入了无限循环,该数就不是快乐数。如果没有出现则将该数加入到哈希表中,进行下一次计算。不断重复这个过程,直到形成闭环或者变为 1 。
class Solution:
def isHappy(self, n: int) -> bool:
def calculate_happy(num):
sum = 0
while num:
sum += (num % 10) ** 2
num = num // 10
return sum
num_set = set()
while True:
n = calculate_happy(n)
if n == 1:
return True
if n in num_set:
return False
else:
num_set.add(n)
1.两数之和
思路:
哈希表中键值对信息为 target-num,index
遍历数组,对于每一个数num:
- 先查找字典中是否存在 target-num,存在则输出 target-num对应的下标和当前数组的下标 index。
- 不存在则在字典中存入target-num的下标 index。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
res = dict()
for index, num in enumerate(nums):
if target - num in res:
return [res[target-num], index]
else:
res[num] = index
return None