题目考察的知识点:双指针

题目解答方法的文字分析:暴力遍历,求出每种可能,符合条件则保留;可以优化一下,如:a[i]>target,则break;a[i]+b[j]>target,则break。

本题解析所用的编程语言:c++

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @param target int整型 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > fourSum(vector<int>& nums, int target)
    {
        // write code here
        vector<vector<int>> ret;
        sort(nums.begin(), nums.end());
        for (int a = 0; a < nums.size() - 3; ++a)
            for (int b = a + 1; b < nums.size() - 2; ++b)
                for (int c = b + 1; c < nums.size() - 1; ++c)
                    for (int d = c + 1; d < nums.size(); ++d)
                    {
                        vector<int> t(4);
                        t[0] = nums[a],t[1] = nums[b],t[2] = nums[c],t[3] = nums[d];

                        if (t[0] + t[1] + t[2] + t[3] == target)
                            if (ret.empty() || ret[ret.size() - 1] != t)
                                ret.push_back(t);
                        else if (t[0] + t[1] + t[2] + t[3] > target)
                            break;
                    }
        return ret;
    }
};