力扣一日一练(37)——四数之和

82 阅读1分钟

题目:四数之和

给定一个包含 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数组的字符串拆分得到结果

题目链接

leetcode-cn.com/problems/4s…