我想写一个函数,它将一个字母数组作为参数,并选择一些字母.
假设您提供了8个字母的数组,并希望从中选择3个字母.然后你应该得到:
8! / ((8 - 3)! * 3!) = 56
Run Code Online (Sandbox Code Playgroud)
数组(或单词)返回,每个包含3个字母.
编程访谈中的一个常见任务(不是根据我的访谈经验)是采用字符串或整数并列出每个可能的排列.
有没有这样做的例子和解决这个问题背后的逻辑?
我已经看过一些代码片段,但它们没有得到很好的评论/解释,因此难以理解.
我最近在工作中进行了促销编码测试.这是我真正努力的任务之一,并且想知道最好的方法是什么.我使用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中的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中有一个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) 我已经看到了几个关于如何在数组中生成所有可能的元素组合的类似问题.但是我很难弄清楚如何编写一个只输出组合对的算法.任何建议都将超级赞赏!
从以下数组开始(带有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世界的新手.正如标题所提到的,我想知道JavaScript中是否有任何预先构建的方法来查找给定字符串的所有可能的排列.
例如,给定输入:
the
Run Code Online (Sandbox Code Playgroud)
期望的输出:
the
teh
eht
eth
het
hte
Run Code Online (Sandbox Code Playgroud) 我试图从头开始这样做,而不使用标准库之外的库.继承我的代码:
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)
我该怎么做呢?
我一直在盯着这个问题的答案,甚至在每次迭代中写下变量和诸如此类的东西.我只是不在这里得到这个过程.当我输入控制台日志时,我看到permute被称为input.length - 在它到达此行之前的1倍input.splice(i,0,ch); 当我完全迷失时很难说出这个问题,但我想有些好奇心是:每次调用permute时,它都是该函数的一个新实例,它有自己的闭包权吗?因此,函数内的变量变化不会影响其他调用中的变量?该函数每次被调用时都会返回permArr吗?而且我想这不一定会影响第一次通话的回归?(我的直觉告诉我第一次返回,函数停止运行).
感谢您的见解.
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) 假设我们有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 ×7
algorithm ×6
arrays ×3
permutation ×3
combinations ×2
recursion ×2
c# ×1
for-loop ×1
haskell ×1