0

我有四个要素:

A B C D

我可以n elements按字典顺序排列 的所有排列,因此对于n=2

0=AA 1=AB 2=AC 3=AD ... 15=DD

我如何在不依靠计数的情况下计算特定元素的此排序中的索引?

当我枚举我的元素0=A 1=B 2=C 3=D并有一个字符串时string,我可以计算这样的索引n=2

4 * val(string[0]) + val(string[1])
string="AC" -> 4*0 + 2 = 2
string="DD" -> 4*3 + 3 = 15

如何找到任何字符串的索引和n > 2?我只是真的需要它n=2,3,4,5,但感觉应该有一个我没有看到的通用解决方案?

4

2 回答 2

3

不只是

(4 ^ (n - 1)) * val(string[0])
+ (4 ^ (n - 2)) * val(string[1])
+ ...
+ (4 ^ (0)) * val(string[n-1])

您可能会使用循环对其进行编程。

于 2014-08-18T23:23:17.403 回答
1

如果你把这些字母{A​​, B, C, D}改成数字{0, 1, 2, 3},你会发现它只是四进制,或者假设你有10个字母{A, B, C, D , E, F, G, H, I, J} 并将它们更改为 0 - 9,就像我们熟悉的十进制表示法一样。所以,在四进制中,AA=00,DD=33,换成十进制就是3*4+3=15,BC的索引就是1*4+2=6。

于 2014-08-18T23:38:02.177 回答