Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note: The solution set must not contain duplicate quadruplets.
For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.
A solution set is:
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]
给定一个数组在其中找出4个和为target的数。和3Sum有些共同点。
这边有个问题,题目要求返回IListIList<>>的值,但我不知道怎么给他初始化,只能用ListList>代替了。这样的话,结果是对的,但LeetCode AC不了。
public class Solution {
public List<List<int>> FourSum(int[] nums, int target) {
List<List<int>> result = new List<List<int>>();
if(nums==null|| nums.Count()<4)
return result;
Array.Sort(nums);
for(int i=0; i<nums.Count()-3; i++){
if(i!=0 && nums[i]==nums[i-1])
continue;
for(int j=i+1; j<nums.Count()-2; j++){
if(j!=i+1 && nums[j]==nums[j-1])
continue;
int k=j+1;
int l=nums.Count()-1;
while(k<l){
if(nums[i]+nums[j]+nums[k]+nums[l]<target){
k++;
}else if(nums[i]+nums[j]+nums[k]+nums[l]>target){
l--;
}else{
List<int> t = new List<int>();
t.Add(nums[i]);
t.Add(nums[j]);
t.Add(nums[k]);
t.Add(nums[l]);
result.Add(t);
k++;
l--;
while(k<l &&nums[l]==nums[l+1] ){
l--;
}
while(k<l &&nums[k]==nums[k-1]){
k++;
}
}
}
}
}
return result;
}
}