获取组合序列索引

时间:2017-12-26 12:09:10

标签: java c algorithm math

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

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

我将所有数据存储在数组中,现在按顺序可以知道哪个索引  发生了特殊的组合。示例:6 A处的“A B C”, 27岁的“C C C”。

同样通过索引可以得出它看起来像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

2 个答案:

答案 0 :(得分:3)

您的组合对应于基数为3的数字,它们使用字母CAB作为其数字:

  • C对应0
  • WebView webview = (WebView) findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); String pdfUrl = "http://www.adobe.com/devnet/acrobat/pdfs/pdf_open_parameters.pdf"; webview.loadUrl("http://drive.google.com/viewerng/viewer?embedded=true&url=" + pdfUrl); 对应1
  • {{1}}对应2

如果将索引转换为base-3,则会得到相应的组合。您从1开始编号组合,因此您需要在转换前减去1。

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

同样,您可以将组合转换为base-3,例如CAB变为201,然后将其转换为十进制以获得19,将其加1以获得20 - 列表中的CAB索引。

答案 1 :(得分:2)

让我们看一下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