題目:四數之和
給定一個包含 n 個整數的數組 nums 和一個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d ,使得 a + b + c + d 的值與 target 相等?找出所有滿足條件且不重複的四元組。
注意:
- 答案中不可以包含重複的四元組。
示例
示例:
給定數組 nums = [1, 0, -1, 0, -2, 2],和 target = 0。
滿足要求的四元組集合爲:
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]
使用JavaScript語言
/**
* @param {number[]} nums
* @param {number} target
* @return {number[][]}
*/
var fourSum = function(nums, target) {
var len = nums.length;
var arr = [],z = 0;
/**先將nums數組排一遍序,不然我一直出錯!! */
nums = nums.sort(function(a,b){return a-b})
if(len < 4){
// console.log("false")
return [];
}else{
for(var i = 0;i<len-3;i++){
for(var j = i+1;j<len-2;j++){
for(var k = j+1;k<len-1;k++){
for(var l = k+1;l<len;l++){
if((nums[i] + nums[j] + nums[k] + nums[l]) == target){
// arr[z] = "";
var tryarr = [];
// console.log(arr[z] +":"+ z)
tryarr.push(nums[i]);
tryarr.push(nums[j]);
tryarr.push(nums[k]);
tryarr.push(nums[l]);
tryarr.sort();
arr[z] = tryarr.toString();
// arr[z].toString();
z++;
}
}
}
}
}
}
// console.log(arr[0]+":"+arr[1])
// console.log(arr[0]== arr[1])
/*數組去重*/
var newarr = arr.filter(function(item, index, array){
if(array.indexOf(item) == index){
return item;
}
})
// console.log(newarr.length)
for(var i = 0;i<newarr.length;i++){
// console.log(newarr[i])
newarr[i] = newarr[i].split(",");
newarr[i].sort(function(a,b){return a-b})
}
// newarr = newarr.sort(function(a,b){return a-b})
return newarr;
};
分析
首先先將nums數組從小到大排一遍序,然後我循環了四次去相加,如果四個數相加得到目標,將四個數加入數組後,將其轉化爲字符串,得到所有的四個數字符串,加入arr數組中,然後arr數組去重得到newarr數組,將newarr數組的字符串拆分得到結果