java中的组合

时间:2016-04-18 05:18:28

标签: java combinations hamming-distance

我编写了一个java代码来编写长度为N“的所有位串组合。这段代码打印所有组合,但我希望所有组合都具有正好N长度和”H“1。

像N = 4& H = 2 => 0011,0101,0110,1100,1010,1001

$(".basic").spectrum({
    color: "#f00",
    change: function(color) {
        $("#basic-log").text("change called: " + color.toHexString());
    }
});

2 个答案:

答案 0 :(得分:0)

有两种方法:

(1)在System.out.print之前,计算A中1的数量,看看它是否与您想要的数量相符。

(2)将递归方法定义为

public void print(int n, char[] k, char[] A, int numberOfOnes) {

然后:

  • 当您递归调用print时,最后一个参数将取决于您是仅向A添加了1还是0。如果添加了0,则numberOfOnes将与传入的值相同。如果添加了1,则在递归调用时使用numberOfOnes - 1。例如,假设n=4并且您希望生成具有2个1位的所有4位位串。如果将第一位设置为0,则现在需要生成所有3位字符串,其中包含2位。但是当你将第一位设置为1时,你需要生成所有3位字符串,其中1位是1位,因为你已经用完了1中的一位。

  • 基本情况:如果numberOfOnes为0,则只生成n 0位作为唯一解决方案。如果numberOfOnes大于n,请不要生成任何内容 - 这是不可能的。

答案 1 :(得分:-1)

试试这个。

static void print(int n, char[] k, char[] A, int h, int c) {
    if (n <= 0) {
        if (c == h)
            System.out.print(String.valueOf(A) + " ");
    } else {
        for (int i = 0; i < k.length; i++) {
            A[n - 1] = k[i];
            int nc = i > 0 ? c + 1 : c;
            print(n - 1, k, A, h, nc);
        }
    }
}

public static void main(String[] args) {
    String k = "01";
    int n = 4;
    int h = 2;
    print(n, k.toCharArray(), new char[n], h, 0);
}
相关问题