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;
}
}