【问题标题】:Javascript given a number i want all possible combinations sum element arrayJavascript给定一个数字我想要所有可能的组合和元素数组
【发布时间】:2015-04-13 05:17:34
【问题描述】:

在 javascript 代码中,我将所有可能的元素组合,它们的总和给出我想要的数字: 示例:

array = [2, 1, 2, 1]; 
number = 3; 
finalArray = [[2, 1], [2, 1], [1, 2], [2, 1]]

array = [5, 5, 4, 4, 2] 
number = 10 
finalArray = [[5, 5], [4, 4, 2]]

这是我的代码,但我只有第一个组合!我不知道为什么当我返回递归函数时,也返回主函数并且它不会继续使用另一个组合。 你能帮我吗?我关注这个Finding all possible combinations of numbers to reach a given sum

 $(document).ready(function() {

    var numero = 3;
    var array = [2, 1, 2, 1];
    var tmpArray = [];
    var finalArray = [];

    $("#button").click(function() {
        combinationTableCard(array, numero, tmpArray);
        console.log(finalArray);
    })

    function combinationTableCard(cardArray, number, partialArray) {

            var n;
            var s = sumArray(partialArray);
            if (s == number) {
                finalArray.push(partialArray);
            }
            if (s >= number) {
                return;
            }
            for (i=0; i<cardArray.length; i++) {
                    n = cardArray[i];
                    var remaining = copyArray(cardArray, i+1, cardArray.length-1);

                    partialArray.push(n);
                    combinationTableCard(remaining, number, partialArray);
            }
        }

    function sumArray(v) {
            var total = 0;      
            if (v.length == 0) {
                return total;
            } else {
                for (i=0; i<v.length; i++) {
                    total += v[i];
                }
                return total;
            }
        }

        function copyArray(v, i, j) {
            var newV = new Array();
            var k = 0;
            for(i; i <= j; i++) {
                newV[k] = v[i];
                k++;
            }
            return newV;
        }

    })

【问题讨论】:

    标签: javascript algorithm search combinations


    【解决方案1】:

    在这个函数中,问题是你没有将 i 声明为局部变量,所以它变成了全局变量。函数组合 TableCard 和 sumArray 使用相同的变量 i。声明变量 i;你会得到想要的结果。

    【讨论】:

    • 好的,我改变了它,但现在我得到了四个空数组!我在递归调用后添加 partialArray.pop()
    【解决方案2】:

    给你。还需要做一些展示工作

       <!DOCTYPE html>
    
        <head>
          <meta charset="utf-8">
           <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
          <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
          <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
          <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
          <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
    
          <style>
          body {background-color:lightgray}
          </style>
        </head>
        <body>
          <div id="container"></div>
          <button type="button" id="button">Click Me To Calculate combination!</button>
          <script>
          $(document).ready(function() {
    
            var target = 15;
            var array = [3,9,8,4,5,7,10];
            var tmpArray = [];
            var finalArray = [];
    
            $("#button").click(function() {
              sum_up_recursive(array, target, tmpArray);
              console.log(finalArray.toString());
              var finalText = '';
              finalArray.forEach(function(entry) {
                finalText = finalText + entry + '</br>';
              });
              $("#container").html(finalText);
            })
    
            function sum_up_recursive(numbers, number, partialArray) {
    
              var s=0;
              partialArray.forEach(function(entry) {
                s=s+entry;
              });
              if (s == target) {
                //finalArray.push(partialArray);
                var res = partialArray.join();  
                res=res.replace(/,/g , '+');
                res= res+"="+s;
                 console.log(res);
                 finalArray.push(partialArray);
                //$("#container").text(res);
              }
              if (s >= target) {
                return;
              }
              for (var i=0; i<numbers.length; i++) {
                n = numbers[i];
                //var remaining = copyArray(cardArray, i+1, cardArray.length-1);
                var remaining = [];
                var remaining = numbers.slice(i+1);
                var partical_arr = partialArray.slice();       
                partical_arr.push(n);
                sum_up_recursive(remaining, target, partical_arr);
              }
            }
    
          });
    
          </script>
    
        </body>
        </html>
    

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 2015-01-26
      相关资源
      最近更新 更多