2016-04-18 41 views
-1

我編寫Java代碼來寫比特串長度爲N的所有組合」。該代碼打印的所有組合,但我想有確切的N長度和所有組合‘H’1。組合在java中

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

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

public static void main(String[] args) { 
    String k = "01"; 
    @SuppressWarnings("resource") 
    Scanner in = new Scanner(System.in); 
    int n = in.nextInt(); 
    MiniProject i = new MiniProject(); 
    i.print(n, k.toCharArray(), new char[n]); 

} 

回答

-2

試試這個。

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); 
} 
+0

你可否解釋一下這段代碼plz !! ??? :) –

0

有兩種方法:

(1)你的System.out.print之前,計數在A 1點的數量看看它是否與你想要的數量相匹配

(2)定義的遞歸方法是

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

然後:

  • 當你調用print遞歸,最後一個參數將取決於你是否只是增加了一個1或0到A。如果添加0,則numberOfOnes將與傳入的值相同。如果添加1,則遞歸調用時使用numberOfOnes - 1。例如,說n=4,並且您想要生成2個1的所有4位位串。如果您將第一位設置爲0,您現在需要生成2位一位的所有3位字符串。但是當你將第一位設置爲1時,你會想要用1位生成所有的3位字符串,因爲你已經用完了1中的一個。

  • 基本情況:如果numberOfOnes爲0,則只生成n 0位作爲唯一的解決方案。如果numberOfOnes大於n,請不要生成任何內容 - 這是不可能的。