leetcode做题记录0018

leetcode 0018

说明

只是为了记录一下,不求多快,也不深究。

会简要描述思路,代码中不写注释。

如碰到不会做的用了别人代码会在博客中标出。

题目描述

在这里插入图片描述

结果

在这里插入图片描述

思路

我本来以为有什么高级的办法,结果网上看一下和之前的三数之和一样,外面多加了一重循环。。。。

代码

class Solution {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        if(nums.length < 4) {
        	return new ArrayList<>();
        }
        List<List<Integer>> ls = new ArrayList<List<Integer>>();
        Arrays.sort(nums);
        for(int i=0;i<nums.length-3;i++) {
        	if(i == 0 || nums[i] != nums[i-1]) {
        		for(int j = i+1;j<nums.length - 2;j++) {
            		if(j == i+1 || nums[j] != nums[j-1]) {
            			for(int m = j+1,n = nums.length-1;m<n;) {
            				if(m>j+1&&nums[m] == nums[m-1]) {
            					m++;
            					continue;
            				}
            				if(n<nums.length-1&&nums[n] == nums[n+1]) {
            					n--;
            					continue;
            				}
            				if(nums[i]+nums[j]+nums[m]+nums[n] < target) {
            					m++;
            					continue;
            				}else if(nums[i]+nums[j]+nums[m]+nums[n] > target){
            					n--;
            				}else {
            					List<Integer> l = new ArrayList<Integer>();
            					l.add(nums[i]);
            					l.add(nums[j]);
            					l.add(nums[m]);
            					l.add(nums[n]);
            					ls.add(l);
            					m++;
                                  n--;
            				}
            			}
            		}
            	}
        	}
        	
        }
		
		return ls;
    }
}
发布了77 篇原创文章 · 获赞 1 · 访问量 2079

猜你喜欢

转载自blog.csdn.net/Paul_1i/article/details/104419441