我想创建一个包含一系列 4 个字母的所有排列的数组(将它们称为 A、C、G、T 以表示 4 种核苷酸碱基)。程序应该询问用户 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 时,它给了我:
- 交流电
- 股份公司
- 在
- 加州
- CG
- 电脑断层扫描
- 遗传算法
- GC
- 燃气轮机
- 助教
- TC
- TG
理想情况下,它将打印:
- 交流电
- 股份公司
- 在
- AA
- 加州
- 抄送
- CG
- 电脑断层扫描
- 遗传算法
- GG
- GC
- 燃气轮机
- 助教
- TC
- TG
- TT