我编写了一个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());
}
});
答案 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);
}