我有一个数组,比方说一万个数字。我需要过滤掉具有特定模式的数字。我有一些像这样的映射,
奇数/偶数
如果数字是奇数-> O
如果数字是偶数-> E
H/M/L
如果数字在7-9 -> H之间
如果数字在4-6 -> M之间
如果数字在0-3 -> L之间
现在我们取一个数字,比方说982。在O/E中,它将在H/M/L中转换为OEE,它将转换为HHL
我想给具有可变位数的数字提供动态过滤器。
m->要排列的字符数
n->否要排列字符的位置表示如果是两位数,则可能排列的数目
数字可以是O或E
O/E、m=2、n=2
2*2 =4
OO、OE、EO、EE
数字可以是H、M或L
H/M/L、m=2、n=3
3*3 =9
HH、MM、LL、HM、MH、HL、LH、ML、LM
现在对于一个三位数的数字,可能的排列数量
O/E、m=3、n=2
2*2*2 =8
OOO,EEE,OOE,OEO,EOO,OEE,EOE,EOO
H/M/L、m=3、n=3
3*3*3 = 27
对于更多的位数和更多的分类因子
那么,当m和n可以是动态的时,我如何找到m个字符在n个位置(*带重复)的所有可能的排列。
我在网上寻找解决方案,找到了类似这个问题的解决方案,但不是这个确切的问题。
下面是我找到的代码:
//Write a JavaScript function that generates all combinations of a string.
function substrings(str1)
{
var array1 = [];
for (var x = 0, y=1; x < str1.length; x++,y++)
{
array1[x]=str1.substring(x, y);
}
var combi = [];
var temp= "";
var slent = Math.pow(2, array1.length);
for (var i = 0; i < slent ; i++)
{
temp= "";
for (var j=0;j<array1.length;j++) {
if ((i & Math.pow(2,j))){
temp += array1[j];
}
}
if (temp !== "")
{
combi.push(temp);
}
}
console.log(combi.join("\n"));
}
substrings("dog");这并不能解决我的问题。
发布于 2020-06-11 00:03:51
我找到了答案:
findAllPossibleArrangements(charset, prefix, n, k){//n-> No of all given alphabets, k->length of desired string
if(k==0){
console.log(prefix);
return;
}
for(var i = 0; i < n; i++){
var newPrefix = prefix + charset[i];
this.findAllPossibleArrangements(charset, newPrefix, n, k-1);
}
}https://stackoverflow.com/questions/62304910
复制相似问题