LeetCode #18 4Sum
阿新 • • 發佈:2020-10-09
題目
解題方法
這是一道3Sum的變題,可以把它看作是遍歷陣列,每次在比當前數更大的數中做3Sum操作,除了多一層迴圈以外其他與3Sum類似,可以用頭尾雙指標或者雜湊表來做。
再在此題的基礎上引申一下,可以寫出kSum的程式碼,將k作為一個引數傳遞進入函式,再進行遞迴呼叫,最終簡化為在一個區間上的2Sum問題。
程式碼
雙指標法
class Solution: def fourSum(self, nums: List[int], target: int) -> List[List[int]]: if len(nums) < 4: return [] res = set() nums.sort() for i in range(len(nums)-3): if nums[i] + nums[i+1] + nums[i+2] + nums[i+3] > target: break if i 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 low = j + 1 high = len(nums)-1 while low < high: Sum = nums[i] + nums[j] + nums[low] + nums[high] if target > Sum: low += 1 elif target < Sum: high -= 1 else: res.add((nums[i], nums[j], nums[low], nums[high])) low += 1 high -= 1 return map(list, res)