使用下面的兼容矩阵,以下是几个允许的字符串示例 长度为1:0、1、2、3、4 长度为2:02、03、14、20、30、41 长度为3:020、030、141、202、203、302、303、414
0 1 2 3 4 ----------- 0|0 0 1 1 0 1|0 0 0 0 1 2|1 0 0 0 0 3|1 0 0 0 0 4|0 1 0 0 0
我对长度为N的所有字符串的计数解决方案是从空字符串开始,排列第一个数字,并对长度为N-1的所有字符串进行递归调用。递归调用检查添加的最后一个数字并尝试可以放在该数字旁边的所有排列。有一些优化,使我不必每次都尝试排列00、01、04,例如只尝试02、03,但性能仍然很差,因为它从基数5(示例)扩展到基数4000。
除了尝试枚举所有排列之外,对于计算排列有更好的方法吗?