我想知道有多少种方法可以将不同的元素组合成这个字符串。在
"{Hello|Hi|Hey} {world|earth}{!|.|?}"
其中,从每个组({})中随机选择一个项目(用管道分隔)并组合成一个字符串。在
因此,上述“模板”可以产生:
^{pr2}$我猜这是一种排列,但我想确定我是正确的。在
如果这也能与“n”嵌套项一起工作,那就太好了。在
"{{Hello|Hi|Hey} {world|earth}|{Goodbye|farewell} {noobs|n3wbz|n00blets}}"
如果可能的话,我更喜欢基于数学/统计的解决方案而不是暴力循环。在
谢谢!在
问题可分解为两个简单的子问题:
因此,对于
1
,我将使用普通正则表达式+循环方法:我也嵌入了
2
,因为这是最微不足道的部分(如果您热衷于使用reduce
来达到这样的目的,我想这也可以代替最后三行;-)。在在第一个例子中,有3×2×3=18个组合。在
第二个例子是3x4x2x3=72个组合。在
我不太清楚你所说的
{a|b}|{c|d}
不过,我假设你是指从(a或b)或(c或d)中选择一个,这是4个选择。在您可能需要阅读组合here或{a2}。在
更新:是的,就是这么简单。你的问题就跟数数一个数的位数组合数一样。例如,如果我想找到一个ATM管脚号码(4个十进制数字)的组合数,我有集合{0-9},{0-9},{0-9},{0-9}。第一选择有10种可能性(=10)。对于每一个数字,第二个选择有10种可能性(=10×10)。对于每一个,第三个有10个(=10×10×10),第四个有10个(=10×10×10×10=10000)。直觉上应该很清楚,4位数的十进制数有10000种可能性。在
您的例子使用的是单词集而不是数字集,但原理是相同的。组合数是集合1中的项数×集合2中的项数×。。。×n组中的项数等
当你开始设置限制,或者从同一个集合中选择多个项目时,情况会变得更加复杂
相关问题 更多 >
编程相关推荐