相关疑难解决方法(0)

从n返回k个元素的所有组合的算法

我想写一个函数,它将一个字母数组作为参数,并选择一些字母.

假设您提供了8个字母的数组,并希望从中选择3个字母.然后你应该得到:

8! / ((8 - 3)! * 3!) = 56
Run Code Online (Sandbox Code Playgroud)

数组(或单词)返回,每个包含3个字母.

algorithm combinations

551
推荐指数
23
解决办法
43万
查看次数

列出字符串/整数的所有排列

编程访谈中的一个常见任务(不是根据我的访谈经验)是采用字符串或整数并列出每个可能的排列.

有没有这样做的例子和解决这个问题背后的逻辑?

我已经看过一些代码片段,但它们没有得到很好的评论/解释,因此难以理解.

c# algorithm permutation

150
推荐指数
13
解决办法
14万
查看次数

通过置换四个给定数字找出最大可能时间HH:MM

我最近在工作中进行了促销编码测试.这是我真正努力的任务之一,并且想知道最好的方法是什么.我使用if和if的负载,而不是最干净的解决方案,但完成了工作.

我被问到的问题是:

将4个数字格式化为24小时(00:00),找到可能的最长(最晚)时间,考虑到最大小时数为23,最大分钟数为59.如果不可能,则返回NOT POSSIBLE.

例如:

6,5,2,0将是20:56

3,9,5,0将是09:53

7,6,3,8是不可能的

必须返回时间或字符串的示例函数看起来像这样,A,B,C,D与上面以逗号分隔的列表不同的数字:

function generate(A, B, C, D) {
    // Your code here
} 
Run Code Online (Sandbox Code Playgroud)

人们将如何解决这个问题?

javascript algorithm

38
推荐指数
2
解决办法
8506
查看次数

没有递归函数调用的排列

要求:生成集合的所有可能组合的算法,无需重复,或递归调用函数以返回结果.

大多数,如果不是所有的答案都在JavaScript中的Permutations提供从循环或其他函数中递归调用函数以返回结果.

循环内的递归函数调用示例

function p(a, b, res) {
  var b = b || [], res = res || [], len = a.length;
  if (!len) 
    res.push(b)
  else 
    for (var i = 0; i < len 
         // recursive call to `p` here
       ; p(a.slice(0, i).concat(a.slice(i + 1, len)), b.concat(a[i]), res)
       , i++
    );
  return res
}

p(["a", "b", "c"]);
Run Code Online (Sandbox Code Playgroud)

当前的问题试图在线性过程中创建给定的排列,依赖于先前的排列.

例如,给定一个数组

var arr = ["a", "b", "c"];
Run Code Online (Sandbox Code Playgroud)

确定可能的排列总数

for (var len = 1, i = k …
Run Code Online (Sandbox Code Playgroud)

javascript algorithm permutation

29
推荐指数
6
解决办法
4479
查看次数

生成JavaScript数组的排列

我在javascript中有一个n个不同元素的数组,我知道有n个!订购这些元素的可能方式.我想知道什么是最有效(最快)的算法来生成这个数组的所有可能的排序?

我有这个代码:

var swap = function(array, frstElm, scndElm) {

    var temp = array[frstElm];
    array[frstElm] = array[scndElm];
    array[scndElm] = temp;
}

var permutation = function(array, leftIndex, size) {

    var x;

    if(leftIndex === size) {

        temp = "";

        for (var i = 0; i < array.length; i++) {
            temp += array[i] + " ";
        }

        console.log("---------------> " + temp);

    } else {

        for(x = leftIndex; x < size; x++) {
            swap(array, leftIndex, x);
            permutation(array, leftIndex + 1, size);
            swap(array, leftIndex, x);
        } …
Run Code Online (Sandbox Code Playgroud)

javascript arrays recursion permutation

21
推荐指数
3
解决办法
2万
查看次数

Javascript - 在单个数组中生成元素的所有组合(成对)

我已经看到了几个关于如何在数组中生成所有可能的元素组合的类似问题.但是我很难弄清楚如何编写一个只输出组合的算法.任何建议都将超级赞赏!

从以下数组开始(带有N个元素):

var array = ["apple", "banana", "lemon", "mango"];
Run Code Online (Sandbox Code Playgroud)

得到以下结果:

var result = [
   "apple banana"
   "apple lemon"
   "apple mango"
   "banana lemon"
   "banana mango"
   "lemon mango"
];
Run Code Online (Sandbox Code Playgroud)

我正在尝试以下方法,但这导致所有可能的组合,而不是组合对.

var letters = splSentences;
var combi = [];
var temp= "";
var letLen = Math.pow(2, letters.length);

for (var i = 0; i < letLen ; i++){
    temp= "";
    for (var j=0;j<letters.length;j++) {
        if ((i & Math.pow(2,j))){ 
            temp += letters[j]+ " "
        }
    }
    if (temp !== "") {
        combi.push(temp);
    } …
Run Code Online (Sandbox Code Playgroud)

javascript arrays algorithm combinations

16
推荐指数
8
解决办法
2万
查看次数

是否有任何预先构建的方法可以在JavaScript中查找给定字符串的所有排列?

我是JavaScript世界的新手.正如标题所提到的,我想知道JavaScript中是否有任何预先构建的方法来查找给定字符串的所有可能的排列.

例如,给定输入:

the
Run Code Online (Sandbox Code Playgroud)

期望的输出:

the
teh
eht
eth
het
hte
Run Code Online (Sandbox Code Playgroud)

javascript

15
推荐指数
3
解决办法
8862
查看次数

获取Haskell中列表的所有排列

我试图从头开始这样做,而不使用标准库之外的库.继承我的代码:

permutations :: [a] -> [[a]]
permutations (x:xs) = [x] : permutations' xs
    where permutations' (x:xs) = (:) <$> [x] <*> split xs
            split l = [[x] | x <- l]
Run Code Online (Sandbox Code Playgroud)

问题是这只产生一个非确定性计算的分支.理想情况下我想要

(:) <$> [x] <*> ((:) <$> [x] <*> ((:) <$> [x] <*> ((:) <$> [x] <*> xs)))
Run Code Online (Sandbox Code Playgroud)

但我找不到干净利落的方法.我想要的结果是这样的:

permutations "abc" -> ["abc", "acb", "bac", "bca", "cab", "cba"]
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

haskell

11
推荐指数
5
解决办法
1万
查看次数

试图理解javascript中for循环中的递归

我一直在盯着这个问题的答案,甚至在每次迭代中写下变量和诸如此类的东西.我只是不在这里得到这个过程.当我输入控制台日志时,我看到permute被称为input.length - 在它到达此行之前的1倍input.splice(i,0,ch); 当我完全迷失时很难说出这个问题,但我想有些好奇心是:每次调用permute时,它都是该函数的一个新实例,它有自己的闭包权吗?因此,函数内的变量变化不会影响其他调用中的变量?该函数每次被调用时都会返回permArr吗?而且我想这不一定会影响第一次通话的回归?(我的直觉告诉我第一次返回,函数停止运行).

感谢您的见解.

JavaScript中的排列?

var permArr = [],
usedChars = [];

function permute(input) {
  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());
    }
    permute(input);
    input.splice(i, 0, ch);
    usedChars.pop();
  }
  return permArr
};
Run Code Online (Sandbox Code Playgroud)

javascript recursion for-loop

7
推荐指数
1
解决办法
2482
查看次数

检查几组对是否覆盖给定的一对对

假设我们有N成对的数组,例如N=3:

A 1 =[ [3,2], [4,1], [5,1], [7,1], [7,2], [7,3] ]

2 =[ [3,1], [3,2], [4,1], [4,2], [4,3], [5,3], [7,2] ]

A 3 =[ [4,1], [5,1], [5,2], [7,1] ]

我们可以假设每个数组中的对按第一个数字排序,然后按第二个数字排序.此外,同一对不会多次出现在同一个数组中(同一对可以出现在多个数组中,如上所示).

每对中的数字是任意整数> = 1.

我怎么能找到k满足的所有东西:

在此输入图像描述

(简单来说,[k,1], [k,2], ... , [k,N]存在于不同的数组中)

上述示例的预期结果是:[5, 7].

注意:速度是算法最重要的因素,然后是内存.如果它有助于优化速度/内存,请假设N <= 10.数组中的对数可以是~50000.

javascript arrays algorithm data-structures

7
推荐指数
1
解决办法
223
查看次数