美文网首页
js 数组中三个元素之和为零 输出不重复的可能

js 数组中三个元素之和为零 输出不重复的可能

作者: 牛奶大泡芙 | 来源:发表于2020-04-26 23:31 被阅读0次

    这是一个比较经典的题目了,首先在函数的主体内用了dfs的方法,并通过“ i > indexs[x]”来限制重复结果的出现,这样仍然可能出现重复的结果比如这种情况:

    [-1,-1,-1,2]
    

    就是结果中的元素出现了冗余 重复多次,于是用了strings记录每个结果的“sort-->tostring”形式,这样可以避免重复结果的出现。
    目前这个方案还存在优化空间,欢迎指正ou~

    /**
     * @param {number[]} nums
     * @return {number[][]}
     */
    var inner = function (x, y) {
        if (x < y) {
            return 1;
        } else if (x > y) {
            return -1;
        } else {
            return 0;
        }
    }
    var make = function(strings, newone) {
        var n = newone.concat();
        n.sort(inner);
        var s = n.join('');
        if (strings.length === 0 || strings.indexOf(s) === -1) {
            strings.push(s);
            return true;
        }
        return false;
    }
    var dfs = function(nums, state, chain, res, indexs, strings) {
        var n = nums.length;
        if (chain.length === 3) {
            if((chain[0] + chain[1] + chain[2] === 0)){
                if(make(strings, chain)) {
                    var cp = chain.concat();
                    res.push(cp);
                }   
            }
            return;
        }
        var x = indexs.length-1
        for (var i = 0; i<n; i++) {
            var p = nums[i];
            if(state[i] && i > indexs[x]) {
                chain.push(p);
                indexs.push(i);
                state[i] = false;
                dfs(nums, state, chain, res, indexs, strings);
                state[i] = true;
                chain.pop();
                indexs.pop()
            }
        }
    }
    var threeSum = function(nums) {
        var res = [];
        var state = [];
        var strings = [];
        for(var j = 0; j<nums.length; j++){
            state.push(true);
        }
        dfs(nums, state, [], res, [-1], strings);
        return res;
    };
    

    点个小心心再走吧❥(^_-)

    相关文章

      网友评论

          本文标题:js 数组中三个元素之和为零 输出不重复的可能

          本文链接:https://www.haomeiwen.com/subject/hczswhtx.html