- 本题和三数之和那一题差不多,思想相似,三数之和的链接如下:https://blog.csdn.net/cy_believ/article/details/100067685
- 在三数之和的基础上,设置四个指针即可,四个指针分别如下:定点,定点1,首指针,尾指针。然后设置两层循环,i增加和j减,直到ij相等。然后定点1增加,在定点1的基础上,再初始化i,j,ij紧接着循环。定点1循环结束后,再循环最外层的定点。
class Solution:
def fourSum(self, nums, target):
#有很多种的组合
res_nums = []
nums.sort()
print(nums)
if len(nums) == 4 and nums[0] == nums[1] and nums[1] == nums[2] and nums[2] == nums[3]:
if nums[0] + nums[1] + nums[2] + nums[3] == target:
res_nums.append(nums)
return res_nums
else:
pass
for k in range(len(nums) - 3):
# if nums[k] > target:
# return res_nums
if k > 0 and nums[k] == nums[k - 1]:
continue
m = k + 1
i = m + 1
j = len(nums) - 1
for m in range(k+1,len(nums) - 2):
if m > k + 1 and nums[m] == nums[m - 1]:
continue
i = m + 1
j = len(nums) - 1
while i < j:
temp = []
s = nums[k] + nums[m] + nums[i] + nums[j]
if s == target:
temp.append(nums[k])
temp.append(nums[m])
temp.append(nums[i])
temp.append(nums[j])
res_nums.append(temp)
i += 1
while nums[i] == nums[i - 1] and i < j:
i += 1
j -= 1
while nums[j] == nums[j + 1] and i < j:
j -= 1
elif s < target:
i += 1
while nums[i] == nums[i - 1] and i < j:
i += 1
else:
j -= 1
while nums[j] == nums[j + 1] and i < j:
j -= 1
return res_nums
来源:CSDN
作者:chenyy__
链接:https://blog.csdn.net/cy_believ/article/details/104174644