个人思路总结:
其实我觉得这个题没啥用!,前面都做过三数之和了,这个就等于在三数之和的基础上再加一层循环,现在的程序结构就变为了两层循环+双指针。
代码如下:
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<vector<int>> result;
sort(nums.begin(),nums.end());
if(nums.size()<4) return {};
for(int m=0;m<nums.size()-3;m++)
{
if(m>0 && nums[m]==nums[m-1]) continue;
for(int k=m+1;k<nums.size()-2;k++)
{
if(k>m+1 && nums[k]==nums[k-1]) continue;
int tmp = target - nums[m]-nums[k];
int i=k+1, j=nums.size()-1;
while(i<j)
{
if (nums[i] + nums[j] == tmp)
{
result.push_back({nums[m], nums[k], nums[i], nums[j]});
while (i < j && nums[i] == nums[i + 1]) ++i;
while (i < j && nums[j] == nums[j - 1]) --j;
++i; --j;
}
else if (nums[i] + nums[j] < tmp) ++i;
else --j;
}
}
}
return result;
}
};