Java 获取组合序列的索引

Java 获取组合序列的索引,java,c,algorithm,math,Java,C,Algorithm,Math,我正在生成三个字母的可能组合,如下面模式中的(A,B,C)。固定外部字母,更改内部字母 对于(A,B,C)=3*3*3的可能性 我把所有的都存储在数组中,现在按顺序我们可以知道在哪个索引中吗 发生了特别的组合。例如:6点钟的“A B C”, “C”在27岁 同样,通过索引也可以推导出它出现在哪个索引中,如6=“A B C” 有什么模式可以找到吗不需要仅代码公式 A A A A A B A A C A B A A B B A B C A C A A C B A C C B A A B A B

我正在生成三个字母的可能组合,如下面模式中的(A,B,C)。固定外部字母,更改内部字母

对于(A,B,C)=3*3*3的可能性

我把所有的都存储在数组中,现在按顺序我们可以知道在哪个索引中吗 发生了特别的组合。例如:6点钟的“A B C”, “C”在27岁

同样,通过索引也可以推导出它出现在哪个索引中,如6=“A B C”

有什么模式可以找到吗不需要仅代码公式

A A A
A A B
A A C

A B A
A B B
A B C

A C A
A C B
A C C

B A A
B A B
B A C

B B A
B B B
B B C

B C A
B C B
B C C

C A A
C A B
C A C

C B A
C B B
C B C

C C A
C C B
C C C

您的组合对应于基数为3的数字,它们的数字使用字母
A
B
、和
C

  • A
    对应于0
  • B
    对应于1
  • C
    对应于2
如果将索引转换为base-3,则会得到相应的组合。您需要从1开始对组合进行编号,因此需要在转换之前减去1

例如,要获得第6行的组合,请减去1得到5,然后将5转换为基数3得到012,然后用字母替换数字得到ABC


类似地,您可以将一个组合转换为基数-3,例如CAB变为201,然后将其转换为十进制以获得19,添加1以获得20-列表中CAB的索引。

让我们看看a和B的简单情况

你会得到

AA
AB
BA
BB
但是等等,这就像二进制一样

00
01
10
11
那么,在这种情况下,如果我们写行,我们将得到:

1 = AA
2 = AB
3 = BA
4 = BB
所以它就像一行的二进制表示-1; 例如,二进制中的第2行=>2-1=1=>1是01=>AB

所以事实上,你应该做同样的事情,但不是二进制的,而是三进制的(这是一个单词吗?)——在你的例子中,这意味着索引是3

最右边的“数字”是字母表大小(在您的示例中为3),以0的幂表示 下一个是字母表大小的1次方

因此-CAC=>2*3^2+0*3^1+2*3^0=18+0+2=20(+1确定行从0开始)=21 等等