我试图实现给定的一组不同的整数,s,返回所有可能的子集问题。
[A,B,C]应该给出[…],[A],[A,B],[A,B,C],[A,C],[B],[B,C],[C]]。
无法找出函数不回溯的原因。
对于输入[a,a,b,c],我的实现输出[[],[“a”],[“a”,“a”],[“a”,“a”,“b”],[“a”,“a”,“b”,“c”]]
这是我的密码。

var subsets = function(A){
  /*for input [ A, A, B, C ], appendCount returns [ [A, 2], [B, 1], [C,1] ]*/
  var arr = appendCount(A);
  result =[[]];
  var tempArr = [];

  var findSubsets = function(index, tempArr, a) {
    var arrCopy = a.slice();
    while(index < arrCopy.length) {
      if(arrCopy[index][1] > 0) {
        tempArr.push(arrCopy[index][0]);
        result.push(tempArr.slice());
        var newArr = arrCopy.slice();
        newArr[index][1] -= 1;
        findSubsets(index, tempArr, newArr);
        tempArr.pop();
        index++;
   } else {
       index++;
   }
 }
}
 findSubsets(0, tempArr, arr.slice());
 return result;
}

提前谢谢

最佳答案

递归的

function findSubsets( array, position ){
    position = position || 0;

    if (position >= array.length) return [[]];

    var output = findSubsets( array, position + 1 );

    for (var i = 1, endI = output.length; i < endI ; i++){
        output.push(
            output.slice(i, i+1).concat( array[position] )
        );
    };

    return output.concat( array[position] );
};

迭代的
function findSubsetsIterative( array ){
    var output = [];

    for (var n = 0 , limit = 1 << array.length ; n < limit ; n++) {
        var subSet = [];
        for (var i = n, p = 0; i ; i >>= 1, p++){
            if (i & 1) subSet.push( array[p] );
        };
        output.push( subSet )
    };

    return output;
};

关于javascript - 在数组中查找所有子集,递归不起作用,JavaScript,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42635176/

10-14 17:11
查看更多