Javascript 将数字映射到字符

Javascript 将数字映射到字符,javascript,data-structures,permutation,Javascript,Data Structures,Permutation,我想用这种方式将这个数字“12145”映射到字符 12145->1,2,1,4,5->a,b,a,d,e 也可以是 12145->12,1,4,5->l,a,d,e 也可以是 12145->12,14,5->l,m,e 等等, 但是12145不能是1,2,1,45,因为字母表中没有45的映射 有谁能解释一下生成这些排列的简单算法吗 "12345" 基本上,首先我们想要得到大数字字符串的子字符串,长度为一个或两个字节,所以我们只从一个字节开始: ["1", "2","3","4","5"]

我想用这种方式将这个数字“12145”映射到字符

12145->1,2,1,4,5->a,b,a,d,e

也可以是

12145->12,1,4,5->l,a,d,e

也可以是

12145->12,14,5->l,m,e

等等,

但是12145不能是1,2,1,45,因为字母表中没有45的映射

有谁能解释一下生成这些排列的简单算法吗

"12345"
基本上,首先我们想要得到大数字字符串的子字符串,长度为一个或两个字节,所以我们只从一个字节开始:

 ["1", "2","3","4","5"]
然后我们从左到右将其中两个分组:

["12","3","4","5"]
["12","34","5"]
我们继续从第二个字符开始,而不是从第一个字符开始:

["1","23","4","5"]
["1","23","45"]
我们重复这一步骤,直到最后一组,我们应该有所有的组合:

 var val = (12345 +"").split("");//convert to string array
 var result = [val.slice(0)];

 //the start at loop:
for(var start = 0; start < val.length - 1; start++){
  //join groups one after each other:
  var grouped = [];
  for(var i = start; i < val.length - 1; i+=2){
    //group sth:
   grouped.push( val.slice(i,i+2).join("") );
   //generate the result:
  result.push( 
   val.slice(0,start).concat(//the numbers before the grouping
     grouped,//the grouped
     val.slice(i+2)) //after grouping
    );
 }
}
基本上,首先我们想要得到大数字字符串的子字符串,长度为一个或两个字节,所以我们只从一个字节开始:

 ["1", "2","3","4","5"]
然后我们从左到右将其中两个分组:

["12","3","4","5"]
["12","34","5"]
我们继续从第二个字符开始,而不是从第一个字符开始:

["1","23","4","5"]
["1","23","45"]
我们重复这一步骤,直到最后一组,我们应该有所有的组合:

 var val = (12345 +"").split("");//convert to string array
 var result = [val.slice(0)];

 //the start at loop:
for(var start = 0; start < val.length - 1; start++){
  //join groups one after each other:
  var grouped = [];
  for(var i = start; i < val.length - 1; i+=2){
    //group sth:
   grouped.push( val.slice(i,i+2).join("") );
   //generate the result:
  result.push( 
   val.slice(0,start).concat(//the numbers before the grouping
     grouped,//the grouped
     val.slice(i+2)) //after grouping
    );
 }
}

您可以尝试获取单数或双数,并获取它们的字母值

它与带有两个参数的递归函数
fork
一起工作,
left
right
,而
left
是给定字符串,
right
是用于收集有效数字字符表示的部分组的临时数组

在函数
fork
开始时,退出条件检查是否所有字符都已分发。在这种情况下,如果字符串
left
的长度为0,则将临时数组right转换为字母字符串并推送到结果集,同时返回函数

主要部分基本相同,检查子字符串值是否有效(大于零且小于或等于26),然后使用不带新子字符串的字符串和包含新子字符串的数组再次调用递归函数

最后,
result
包含所有可能的组合

函数getcompositions(字符串){
功能叉(左、右){
如果(!left.length){
push(right.map(函数(v){return(+v+9).toString(36);}).join(“”));
返回;
}
如果(+左[0]>0){
叉子(左。切片(1),右。贝壳(左[0]);
}

如果(left.length>=2&&+(left.slice(0,2))您可以尝试获取单数字或双数字,并获取它们的字母表值

它与带有两个参数的递归函数
fork
一起工作,
left
right
,而
left
是给定字符串,
right
是用于收集有效数字字符表示的部分组的临时数组

在函数
fork
的开头,一个退出条件检查是否所有字符都是分布式的。在这种情况下,如果字符串
left
的长度为0,则将临时数组right转换为字母字符串并推送到结果集,同时返回函数

主要部分基本相同,检查子字符串值是否有效(大于零且小于或等于26),然后使用不带新子字符串的字符串和包含新子字符串的数组再次调用递归函数

最后,
result
包含所有可能的组合

函数getcompositions(字符串){
功能叉(左、右){
如果(!left.length){
push(right.map(函数(v){return(+v+9).toString(36);}).join(“”));
返回;
}
如果(+左[0]>0){
叉子(左。切片(1),右。贝壳(左[0]);
}

如果(left.length>=2&&+(left.slice(0,2))这是家庭作业吗?规则是什么?为什么
1
有时是
a
,有时是
1
?为什么
12345
变成
12,14,5
?你尝试了什么?更不用说12345->1,2,3,4,5我更新了帖子。一个问题的所有不同解决方案都称为排列。这可能会帮助你找到解决方案。是吗它是家庭作业?规则是什么?为什么
1
有时是
a
,有时是
1
?为什么
12345
变成
12,14,5
?你尝试了什么?更不用说12345->1,2,3,4,5我更新了帖子。一个问题的所有不同解决方案都称为排列。这可能会帮助你找到解决方案。