为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

交互式爱情 2021-04-26 13:22:54
我正在尝试将元素的每个单独组合放入一个数组中。现在,我可以使用下面的方法,并删除重复项,但是这种方式对于我的使用来说已经很慢了。下面的代码将找到低于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 incorrectfor (let a = 0; a < amount; a++) {  for (let b = 0; b < amount; b++) {    possibilities.push(a + b);  }}possibilities = [...new Set(possibilities)]; //Removes duplicatespossibilities.sort((a, b) => b - a); //Sorts in descending orderpossibilities = possibilities.slice(0, 3); //Gets top 3 valuesconsole.log(possibilities);
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

好的,如评论中所述,如果您需要特定数量的前3个值,则可以执行以下简单操作:


let amount = 6;

let highest = amount - 1,second_highest = amount - 2,third_highest = amount - 3;

let possibilities = [

    highest + highest,

    highest + second_highest,

    highest + third_highest

];


console.log(possibilities);


查看完整回答
反对 回复 2021-05-06
?
守候你守候我

TA贡献1802条经验 获得超10个赞

我不知道有什么更好的解决方案,但是是的,您需要先检查一些条件。

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个循环,为此更好地创建了动态逻辑以自动创建循环数。

您需要考虑11111112这种类型的组合也是正确的吗?或者,如果仅需要1234、2134、2314这种情况?这可以非常简单地完成。

对于复制,您可以将组合存储为键值对。然后Object.Keys将是您的组合。


查看完整回答
反对 回复 2021-05-06
  • 2 回答
  • 0 关注
  • 274 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信