四数相加II
class Solution:
def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
#使用哈希法的经典题目.四个数组是独立的因此只需要考虑最后相加为0的元祖就行了,不用考虑重复的元素。
map_=dict()
for i in nums1:
for j in nums2:
if i+j in map_:
map_[i+j]+=1
else:
map_[i+j]=1
count=0
for i in nums3:
for j in nums4:
key=-i-j
if key in map_:
count=count+map_[key]
return count
赎金信
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
record=[0]*26
for i in magazine:
record[ord(i)-ord('a')]+=1
for j in ransomNote:
if record[ord(j)-ord('a')]==0:
return False
else:
record[ord(j)-ord('a')]-=1
return True
三数之和
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
#使用双指针方法较好
ans=[]
n=len(nums)
nums.sort()
for i in range(n):
left=i+1
right=n-1
if nums[i]>0:
break
if i>=1 and nums[i]==nums[i-1]:
continue
while left<right:
total=nums[i]+nums[left]+nums[right]
if total<0:
left+=1
elif total>0:
right-=1
else:
ans.append([nums[i],nums[left],nums[right]])
while left!=right and nums[left]==nums[left+1]: left+=1 #出去b
while left!=right and nums[right]==nums[right-1]:right-=1 #去重c
left+=1
right-=1
return ans
四数之和
class Solution:
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
nums.sort()
n=len(nums)
ans=[]
for i in range(n):
if i>0 and nums[i]==nums[i-1]:continue
for k in range(i+1,n):
if k>i+1 and nums[k]==nums[k-1]:continue
left=k+1
right=n-1
while left<right:
total=nums[i]+nums[k]+nums[left]+nums[right]
if total<target:
left+=1
elif total>target:
right-=1
else:
ans.append([nums[i],nums[k],nums[left],nums[right]])
while left<right and nums[left]==nums[left+1]:left+=1
while left<right and nums[right]==nums[right-1]:right-=1
left+=1
right-=1
return ans
两数相加`
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
#初始化链表
head=tree=ListNode()
temp=val=0
while temp or l1 or l2:
val=temp
if l1:
val=l1.val + val
l1=l1.next
if l2:
val=l2.val+val
l2=l2.next
temp=val // 10 #取商
val=val % 10 #取余
#实现链表的连接
tree.next = ListNode(val)
tree = tree.next
return head.next