力扣242. 有效的字母异位词
接触过哈希表做起来很简单,跟之前不同的是需要判断次数,引入了新的collections.defaultdict()的使用方法,避免再存入相同键值时报错。详见Python中的defaultdict方法_yealxxy的博客-CSDN博客_python defaultdict
class Solution:
import collections # 引入defaultdict方法判断次数
def isAnagram(self, s: str, t: str) -> bool:
dic_s = defaultdict(int) # 当有多个相同字母(键)时,导致KeyError异常
dic_t = defaultdict(int) # 注意使用方法,定义值类型
for i in s:
dic_s[i] += 1
for j in t:
dic_t[j] += 1
return dic_s == dic_t
力扣349.两个数组的交集
很简单,一种是利用set写法,另一种是查询到相同值从字典中删去该值,下次访问到不会重复。
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
dic1 = {}
same_set = set()
for i in nums1:
dic1[i] = 1
for j in nums2:
if j in dic1.keys(): # 判断是否存在键
same_set.add(j)
return list(same_set)
力扣202.快乐数
主要考点为判断死循环,其余是提取数字的不同位数,偏易。
class Solution:
def isHappy(self, n: int) -> bool:
# 由于可能陷入无限循环,为了判断是否已经进入过循环,利用集合或哈希表存入每次结果
dic = dict()
def cal_happy(num): # 计算和判断是否重复
sum_ = 0
while num:
sum_ += (num % 10) ** 2 # 计算个位数平方
num = num // 10 # 地板除移至高位,为0则终止
return sum_
# 利用集合记录每次结果,也可用哈希表判断键值是否存在
record = set()
while True:
n = cal_happy(n) # 平方和替换
if n == 1:
return True
# 如果中间结果重复出现,说明陷入死循环了,该数不是快乐数
if n in record:
return False
else:
record.add(n)
力扣1.两数之和
同样也可以用
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
target_set = []
for i in range(len(nums)):
for j in range(i+1,len(nums)):
tem = nums[i] + nums[j]
if tem == target:
target_set = [i,j]
return target_set
else:
continue