获取数字的所有可能组合(最快的方法)

我正在尝试将元素的每个单独组合放入一个数组中。现在,我可以使用下面的方法,并删除重复项,但是这种方式对于我的使用来说已经很慢了。


下面的代码将找到低于4的2位数字的所有可能组合。现在在我实际上想要使用的代码中,最小可能的代码是6个for loop(彼此之间),数量为18(记住,这是最低限度)。


下面的代码将执行amount^[amount of for loops],或者amount^2在这种情况下为16。这意味着在我要用于该代码的代码中,它执行的18^6次数为3400万次。这是最小的,这会得到多少提高。


试图运行我的代码(在这6个福尔循环后amount = 18),它坠毁我的浏览器...我的问题是:是否有更快,更高效(不优雅,我不关心它是如何优雅。在我的)浏览器不会崩溃?


注意:此问题不是重复问题。所有其他问题都只是要求一种方法来实现,但是我已经有了一种方法。我只是想使其更高效,更快,以便其实际正常工作。


let combinations = [];

let amount = 4;


for (let a = 0; a < amount; a++) {

  for (let b = 0; b < amount; b++) {

    combinations.push(`${a}${b}`);

  }

}


console.log(combinations);

下面的代码片段提供了有关我的代码如何工作的可能示例。


let possibilities = [];

let amount = 6; //Amount is set by me, so don't worry about it being incorrect


for (let a = 0; a < amount; a++) {

  for (let b = 0; b < amount; b++) {

    possibilities.push(a + b);

  }

}


possibilities = [...new Set(possibilities)]; //Removes duplicates

possibilities.sort((a, b) => b - a); //Sorts in descending order

possibilities = possibilities.slice(0, 3); //Gets top 3 values

console.log(possibilities);


交互式爱情
浏览 275回答 2
2回答

繁华开满天机

好的,如评论中所述,如果您需要特定数量的前3个值,则可以执行以下简单操作:let amount = 6;let highest = amount - 1,second_highest = amount - 2,third_highest = amount - 3;let possibilities = [&nbsp; &nbsp; highest + highest,&nbsp; &nbsp; highest + second_highest,&nbsp; &nbsp; highest + third_highest];console.log(possibilities);

守候你守候我

我不知道有什么更好的解决方案,但是是的,您需要先检查一些条件。If(amount <= 0) return 'Invalid amount, Please enter a valid amount"因此,如果有人输入负值或零值,则您的循环将进入无限循环,并使情况变得更糟。if(amount === 1) return '1 possible combination'由于小于1的数量仅是0,并且0的组合仅是1,因此您无需解析整个循环以获取6位数字或n位数字以获取0,因此它将获得1而不是N(数字位数)的复杂度。对于大于1的数量,您可以创建手动循环,例如在这里您为2位数字创建了2个循环,为6位数字创建了6个循环,为此更好地创建了动态逻辑以自动创建循环数。您需要考虑1111,1112这种类型的组合也是正确的吗?或者,如果仅需要1234、2134、2314这种情况?这可以非常简单地完成。对于复制,您可以将组合存储为键值对。然后Object.Keys将是您的组合。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript