有效的字母异位词 :
思路:
1.哈希表法:创建一个数组哈希表(因为字母只有26个,并且ascii码连续),把被比对的数组出现的字母,对应哈希表中的字母位置数值加一,把比对数组出现的字母,在哈希表中对应字母位置减一,最后如果哈希表中全为0,那就为有效的字母异位词
代码:
def isAnagram(self, s: str, t: str) -> bool:
record=[0]*26
for i in s :
record[ord(i)-ord("a")]+=1#ord求acill码
for j in t:
record[ord(j)-ord("a")]-=1
for i in record:
if i!=0:
return False
return True
遇到的问题:
1.求ascii码:使用ord()函数求ASCII码
两个数组的交集:
思路:
1.哈希表:创建两个数组哈希表,分别记录两个数组里出现的数字次数,最后同时遍历两个数组哈希表,因为如果两个数组中都有某个数,那么两个数组哈希表中对应位置一定大于0,那么相乘肯定也大于0,反之如果有其中一个没有,相乘就会等于0,所以只需要判定两个数组哈希表当前位置是否大于0即可
代码:
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
record1=[0]*1001
record2=[0]*1001
for i in nums1:
record1[i]+=1
for j in nums2:
record2[j]+=1
result=[]
for k in range(1001):
if record1[k]*record2[k]>0:
result.append(k)#不要把record里面的数当作结果,record是统计的次数
return result
遇到的问题:
1.错把哈希表中的值,当作结果值,里面只是结果值的统计数
快乐数:
思路:
创建一个数组哈希表,如果n不在哈希表中,就将n放入哈希表中(此步是为了避免无限循环,因为后面,如果n对应的new_num值不为1,要赋值给n),利用转换字符串,for循环来将整数n每一位取出,再转换为int,判断是否满足,每一位的平方的和为1,如果不是就把和赋值给n,重复操作。
代码:
数组哈希
class Solution:
def isHappy(self, n: int) -> bool:
record=[]
while n not in record:
record.append(n)
new_num = 0
n_str = str(n)#转换字符串,使用for循环取出每一位
for i in n_str:
new_num += int(i)**2
if new_num ==1:
return True
else:
n = new_num
return False
遇到的问题:
1.一开始没有理解快乐数的定义
2.没有想到可以把整形转化为字符串,用for循环取出每一项,再转化为int
两数之和:
思路:
因为要同时记录值,及其对应的下标,所以需要使用map,与之契合的是python中的字典,所以使用字典当作哈希表
代码:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
record = dict()
for index,value in enumerate(nums):
if target-value in record:
return [record[target-value],index]
record[value] = index
return []
遇到的问题:
1.对于字典的多种创建方式,调用dict(),直接{}
2.取出数组的值和下标:通过enumerate(),可以将可迭代的容器,返回下标和值

被折叠的 条评论
为什么被折叠?



