一連の 4 文字のすべての順列の配列を作成したいと考えています (4 種類のヌクレオチド塩基を A、C、G、T と呼びます)。プログラムは、順列の長さである k の値をユーザーに尋ねる必要があります。順列を取得できるところまで機能していますが、繰り返しのないものしか表示されません。これがプログラム、現在提供されている出力、および私が提供したい出力です。
import java.util.Arrays;
import TerminalIO.*;
public class Permute {
static KeyboardReader reader= new KeyboardReader ();
static int k= reader.readInt("Enter k-tuple");
static void permute(int level, String permuted,
boolean[] used, String original) {
if (level == k) {
System.out.println(permuted);
} else {
for (int i = 0; i < 4; i++) {
if (!used[i]) {
used[i] = true;
permute(level + 1, permuted + original.charAt(i), used, original);
used[i] = false;
}
}
}
}
public static void main(String[] args) {
String s = "ACGTACGTACGTACGTACGT";
boolean used[] = new boolean[20];
Arrays.fill(used, false);
permute(0, "", used, s);
}
}
K 値に 2 を入力すると、次のようになります。
- 交流
- AG
- で
- カリフォルニア州
- CG
- CT
- GA
- GC
- GT
- TA
- TC
- TG
理想的には、次のように出力されます。
- 交流
- AG
- で
- AA
- カリフォルニア州
- CC
- CG
- CT
- GA
- GG
- GC
- GT
- TA
- TC
- TG
- TT