力扣一日一練(37)——四數之和

題目:四數之和

給定一個包含 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數組的字符串拆分得到結果

題目鏈接

https://leetcode-cn.com/problems/4sum/submissions/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章