class Solution:
def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
_dict = {}
result = 0
for i in nums1:
for j in nums2:
_dict[i+j]=_dict.get(i+j,0)+1
for i in nums3:
for j in nums4:
if -(i+j) in _dict:
result+=_dict[-(i+j)]
return result
四数相加要注意result并不是加一,而是加字典中的值
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
_list = [0]*26
for _char in magazine:
_list[ord(_char)-ord('a')]+=1
for _char in ransomNote:
_list[ord(_char)-ord('a')]-=1
for i in _list:
if i <0:
return False
return True
赎金信
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
# print(nums)
result =[]
for i in range(len(nums)-2):
left = i +1
right = len(nums)-1
if i>0 and nums[i] == nums[i-1]:
continue
while left < right:
_sum = nums[i]+nums[left]+nums[right]
if _sum > 0:
right -=1
elif _sum < 0:
left +=1
else:
result.append([nums[i],nums[left],nums[right]])
left +=1
right -=1
while left <right and left >i+1 and nums[left] ==nums[left-1]:
left +=1
while left <right and right <len(nums)-1 and nums[right] ==nums[right+1]:
right -=1
return result
三数之和
class Solution:
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
nums.sort()
result = []
for i in range(len(nums)-3):
if i>0 and nums[i]==nums[i-1]:
continue
for j in range(i+1,len(nums)-2):
if j>i+1 and nums[j]==nums[j-1]:
continue
left = j +1
right = len(nums)-1
while left <right:
_sum = nums[i]+nums[j]+nums[left]+nums[right]
if _sum < target :
left +=1
elif _sum >target:
right -=1
else:
result.append([nums[i],nums[j],nums[left],nums[right]])
left +=1
right -=1
while left <right and left >j+1 and nums[left] == nums[left -1]:
left +=1
while left <right and right <len(nums)-1 and nums[right] == nums[right +1]:
right -=1
return result
四数之和