Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在JS中创建具有给定字符数的数组置换_Javascript_Arrays_Combinations_Permutation - Fatal编程技术网

Javascript 如何在JS中创建具有给定字符数的数组置换

Javascript 如何在JS中创建具有给定字符数的数组置换,javascript,arrays,combinations,permutation,Javascript,Arrays,Combinations,Permutation,我有一个数组,其中包含一些字符: 变量ar1=[“a”,“1”]; 我想用这个数组的所有排列来创建数组,但如果这样做的话,就会有一定数量的插槽: 如果插槽数量为3,则阵列将如下所示: [“a”、“1”、“a”] [“1”、“a”、“1”] [“a”、“a”、“a”] ["1", "1", "1"] [“a”、“a”、“1”] [“1”、“1”、“a”] [“a”、“1”、“1”] [“1”、“a”、“a”] 等等 我怎样才能做到这一点呢?我会使用递归来解决这个问题,比如: 函数置换(可能

我有一个数组,其中包含一些字符:


变量ar1=[“a”,“1”];
我想用这个数组的所有排列来创建数组,但如果这样做的话,就会有一定数量的插槽:

如果插槽数量为3,则阵列将如下所示:

[“a”、“1”、“a”]
[“1”、“a”、“1”]
[“a”、“a”、“a”]
["1", "1", "1"]
[“a”、“a”、“1”]
[“1”、“1”、“a”]
[“a”、“1”、“1”]
[“1”、“a”、“a”]
等等


我怎样才能做到这一点呢?

我会使用递归来解决这个问题,比如:

函数置换(可能的字符,n){
常量结果=[];
如果(n==0){
返回[];
}
常量子问题结果=置换(可能字符,n-1);
for(设可能字符的字符){
for(子问题结果的子问题){
结果.push([character].concat(sub));
}
}
返回结果;
}

log(排列([“a”,“1”],3))我建议滥用
toString()
方法:

var ar1 = ["a", "1"]

let n = 3
let base = ar1.length

let output = []

for(let i = 0; i < base**n; ++i) {
  output.push(i
    .toString(base)
    .padStart(n, '0')
    .split('')
    .map(x => ar1[parseInt(x, base)])
  )
}

console.log(output)
var ar1=[“a”,“1”]
设n=3
设底面=ar1.5cm长
让输出=[]
对于(设i=0;iar1[parseInt(x,base)])
)
}
console.log(输出)

这样可以避免递归。

问题:给定每个组合的值和长度,查找输入的所有可能组合。inp=输入(数组),Len=每个组合的长度

function permutation(inp, len) {
   let posComb = 1,  r = 1;
   for ( let i =1; i<n/2+1; i++ )  {
      posComb = posComb * (inp-i+1)
      r = r * i;
      if ( posComb / r == inp ) return i;      
   }
   return -1;
} 
函数置换(inp,len){
设posComb=1,r=1;

对于(让我=1;我可以回答你的问题吗?
digits
与此有什么关系?你为什么要进行基转换?可能是从其他地方复制/粘贴了代码?我只是自己写了这段代码。如果你读了,你就不必问反问了。这些不是反问。我读过,注意到
digits
未使用,并且
padStart
不会影响此特定程序。这些明显的迹象表明此代码已从其他地方复制/粘贴。
数字
是以前版本的遗留。
padStart
确实会影响此程序,如果没有它,前导零将消失,数组将不可用甚至长度。至于从其他地方复制…我是github上的Punud,你可以在那里查看我的js代码。寻找独特的风格(没有分号)。我没有指责你没有写它。我一直复制/粘贴我自己的程序。