python leetcode (18)四数之和

爷,独闯天下 提交于 2020-02-05 00:51:01
  1. 本题和三数之和那一题差不多,思想相似,三数之和的链接如下:https://blog.csdn.net/cy_believ/article/details/100067685
  2. 在三数之和的基础上,设置四个指针即可,四个指针分别如下:定点,定点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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!