首页 > 解决方案 > 生成可以为从 1 到 5 的给定输入选择生成的所有可能序列的列表

问题描述

我一直在涉足一些有趣的挑战,我遇到了这个让我有点沮丧的问题。谁能指出我正确的方向?

我有一个清单:

var values = ['blue', 'green', 'red', 'yellow', 'purple'];

从该列表中,我想返回给定输入的所有可能序列。我试过这样的事情:

function combinations(number) {
  const values = ['blue', 'green', 'red', 'yellow', 'purple'];
  let arr = values.slice(0, number);

  if (arr.length === 1) {
    result = [...arr];
    console.log(result)
  }

  var result = arr.reduce((acc, v, i) => acc.concat(arr.slice(i + 1).map(w => v + ' ' + w)),[]);


  console.log(result);
}

combinations(2);

但结果只返回['blue', 'green']它应该返回的地方['blue', 'green', 'bluegreen', 'greenblue']。该解决方案应为每个序列返回至少 1 个值,当然没有重复

有人可以帮忙吗!!我被困住了!

标签: javascriptarrays

解决方案


var permArr = [],
      usedChars = [];
      const values = ['blue', 'green', 'red', 'yellow', 'purple'];

    function permute(number, temp) {

      let input = temp ? temp : values.slice(0, number);

      var i, ch;
      for (i = 0; i < input.length; i++) {
        ch = input.splice(i, 1)[0];
        usedChars.push(ch);
        // if (input.length == 0) {
          permArr.push(usedChars.slice());
        // }
        temp = input;
        permute(number, input);
        input.splice(i, 0, ch);
        usedChars.pop();
      }
      return permArr  
    };

    var perm = permute(5);
    console.log(perm.length)
    console.log(perm);

推荐阅读