# leetcode 018 —— 4Sum （nsum）

Given an array S of n integers, are there elements abc, 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:

• Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
• 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)

4sum就不玩了，直接上nSum

class Solution {
public:
vector<vector<int>> nSum(vector<int>& nums, int target,int n) {
vector<vector<int>> res;
vector<int> path;
sort(nums.begin(), nums.end());
scan(n, 0, target, path,nums, res);
return res;
}
void scan(int level, int start, int target, vector<int> path, vector<int>& nums,
vector<vector<int>> &res)
{
if (level > 2){  //level表示在start与n-1之间删选level个元素
for (int i = start; i < nums.size()-level+1; i++){
if (i>0 && nums[i] == nums[i - 1])
continue;
path.push_back(nums[i]);
scan(level - 1, i+1 , target - nums[i],path,nums,res);
path.pop_back();
}
}
if (level == 2){
int l = start;
int r = nums.size() - 1;

while (l < r){
int sum = nums[l] + nums[r];
if (sum == target){
//path.push_back(nums[start-1]);
path.push_back(nums[l]);
path.push_back(nums[r]);
res.push_back(path);
//path.pop_back();
path.pop_back();
path.pop_back();

while (l < r&&nums[l] == nums[l + 1])
l++;
while (l < r&&nums[r] == nums[r - 1])
r--;
l++;
r--;
}
else if (sum > target)
r--;
else
l++;
}
return;
}
}
};

• 本文已收录于以下专栏：

## leetcode 题解 || 3Sum 问题

problem： Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? ...
• hustyangju
• 2015年03月18日 19:11
• 345

## [LeetCode]3Sum,解题报告

• zinss26914
• 2014年06月13日 23:42
• 2419

## <LeetCode OJ> (1 / 15 / 16 / 18) NSum问题集合

Two Sum My Submissions Question Total Accepted: 164289 Total Submissions: 833770 Difficulty: Med...
• EbowTang
• 2015年12月15日 20:45
• 1114

## [LeetCode]3Sum Closest题解

3sum Closest: Given an array S of n integers, find three integers in S such that the sum is closes...
• fong_613
• 2017年10月16日 17:08
• 53

## 【Leetcode】之4Sum

• messiran10
• 2015年11月05日 09:51
• 240

## [LeetCode] 018. 4Sum (Medium) (C++/Java/Python)

[LeetCode] 018. 4Sum (Medium) (C++/Java/Python)
• hcbbt
• 2015年03月04日 17:57
• 2914

## [C++]LeetCode: 71 4Sum && kSum总结

• cinderella_niu
• 2015年01月06日 10:43
• 1677

## leetcode 15 3Sum

• galaxy_wolf
• 2016年04月11日 19:57
• 109

## LeetCode[Array]----3Sum

3Sum Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Fi...
• whiterbear
• 2016年04月18日 21:20
• 562

## [leetcode] 求和问题总结(2Sum, 3Sum, 4Sum, K Sum)

• bhwolf1987
• 2013年11月03日 14:07
• 8950

举报原因： 您举报文章：leetcode 018 —— 4Sum （nsum） 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)