题意:
解题思路:
思路:    1. (三重枚举,无重复构造) O(n3)    2. 在 3Sum 算法的思路,排序后再增加一重循环即可。
PHP代码实现:
class Solution {    function fourSum($nums, $target) {        if (!$nums) return [];        sort($nums);        $ret = [];        for ($i = 0; $i < count($nums) - 3; $i++) {            if ($i > 0 && $nums[$i] == $nums[$i - 1]) continue;            for ($j = $i + 1; $j < count($nums) - 2; $j++) {                if ($j > $i + 1 && $nums[$j] == $nums[$j - 1]) continue;                $left = $j + 1;                $right = count($nums) - 1;                while ($left < $right) {                    $sum = $nums[$i] + $nums[$j] + $nums[$left] + $nums[$right];                    if ($sum == $target) {                        array_push($ret, [$nums[$i], $nums[$j], $nums[$left], $nums[$right]]);                        while ($left < $right && $nums[$left] == $nums[$left + 1]) $left++;                        while ($left < $right && $nums[$right] == $nums[$right - 1]) $right--;                        $left++; $right--;                    } else if ($sum > $target) {                        $right--;                    } else $left++;                }            }        }        return $ret;    }}
GO代码实现:
func fourSum(nums []int, target int) [][]int {    ans := make([][]int, 0)    if len(nums) < 4 {        return ans    }    sort.Ints(nums)    for i := 0; i <= len(nums) - 4; i++ {        if i > 0 && nums[i] == nums[i - 1] {            continue        }        for j := i + 1; j <= len(nums) - 3; j++ {            if j > i + 1 && nums[j] == nums[j - 1] {                continue            }            k := j + 1            l := len(nums) - 1            for 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 {                    ans = append(ans, []int{nums[i], nums[j], nums[k], nums[l]})                    for k < l && nums[k+1] == nums[k] {                        k++                    }                    for k < l && nums[l-1] == nums[l] {                        l--                    }                    k++                    l--                }            }        }    }    return ans   }