Permutations in JavaScript?

前端 未结 30 3202
不思量自难忘°
不思量自难忘° 2020-11-21 06:52

I\'m trying to write a function that does the following:

  • takes an array of integers as an argument (e.g. [1,2,3,4])
  • creates an array of all the possib
30条回答
  •  轮回少年
    2020-11-21 07:06

    "use strict";
    function getPermutations(arrP) {
        var results = [];
        var arr = arrP;
        arr.unshift(null);
        var length = arr.length;
    
        while (arr[0] === null) {
    
            results.push(arr.slice(1).join(''));
    
            let less = null;
            let lessIndex = null;
    
            for (let i = length - 1; i > 0; i--) {
                if(arr[i - 1] < arr[i]){
                    less = arr[i - 1];
                    lessIndex = i - 1;
                    break;
                }
            }
    
            for (let i = length - 1; i > lessIndex; i--) {
                if(arr[i] > less){
                    arr[lessIndex] = arr[i];
                    arr[i] = less;
                    break;
                }
            }
    
            for(let i = lessIndex + 1; i arr[j] ){
                       arr[i] = arr[i] + arr[j];
                       arr[j] = arr[i] - arr[j];
                       arr[i] = arr[i] - arr[j];
                   }
               }
            }
        }
    
        return results;
    }
    
    var res = getPermutations([1,2,3,4,5]);
    var out = document.getElementById('myTxtArr');
    res.forEach(function(i){ out.value+=i+', '});
    textarea{
       height:500px;
      width:500px;
    }

    Outputs lexicographically ordered permutations. Works only with numbers. In other case, you have to change the swap method on line 34.

提交回复
热议问题