1 var fourSum = function(nums, target) { 2 if (nums.length < 4) { 3 return []; 4 } 5 6 var i, j, l, r, sum, ret = [], 7 len = nums.length; 8 9 //排序 10 nums = nums.sort(function(num1, num2) { 11 return num1 - num2; 12 }); 13 14 for (i = 0; i < len - 3; i++) { 15 //去重 16 if (nums[i] === nums[i - 1]) { 17 continue; 18 } 19 20 for (j = i + 1; j < len - 2; j++) { 21 //去重 22 if (j > i + 1 && nums[j] === nums[j - 1]) { 23 continue; 24 } 25 26 l = j + 1; 27 r = len - 1; 28 29 while (l < r) { 30 sum = nums[i] + nums[j] + nums[l] + nums[r]; 31 if ((r < len - 1 && nums[r] === nums[r + 1]) || (sum > target)) { 32 r--; 33 } else if ((l > j + 1 && nums[l] === nums[l - 1]) || (sum < target)) { 34 l++; 35 } else { 36 ret[ret.length] = [nums[i], nums[j], nums[l], nums[r]]; 37 l++; 38 } 39 } 40 } 41 } 42 43 return ret; 44 };