簡體   English   中英

Java-復雜的遞歸回溯

[英]Java - Complex Recursive Backtracking

對於Java練習,我開始研究countBinary方法,該方法接受整數n作為參數,該方法以升序打印所有具有n位數字的二進制數,並將每個值打印在單獨的行上。 假設n為非負數且大於0,則某些示例輸出將如下所示

我對此一無所知。 我能夠編寫一個程序,該程序查找String和類似內容的所有可能字母組合,但是對於使用二進制和整數的特定問題,我幾乎無法取得任何進展。

顯然,解決此問題的最佳方法是定義一個輔助方法,該方法接受與原始方法不同的參數,並建立一組字符作為String進行最終打印。

重要說明:在本練習中,我完全不應該使用循環。

編輯-重要說明:我需要結尾為0,以便所有輸出的長度相同。

到目前為止,這就是我所擁有的:

public void countBinary(int n)
{
    String s = "01";
    countBinary(s, "", n);
}
private static void countBinary(String s, String chosen, int length)
{
    if (s.length() == 0)
    {
        System.out.println(chosen);
    }
    else
    {
        char c = s.charAt(0);
        s = s.substring(1);
        chosen += c;
        countBinary(s, chosen, length);
        if (chosen.length() == length)
        {
            chosen = chosen.substring(0, chosen.length() - 1);
        }
        countBinary(s, chosen, length);
        s = c + s;
    }
}

當我運行代碼時,我的輸出如下所示

誰能向我解釋為什么我的方法沒有按照我預期的方式運行,並且如果可能,請向我展示我的問題的解決方案,以便獲得正確的輸出? 謝謝!

有更有效的方法可以這樣做,但這將為您提供一個開始:

public class BinaryPrinter  {
  static void printAllBinary(String s, int n) {
    if (n == 0) System.out.println(s);
    else {
      printAllBinary(s + '0', n - 1);
      printAllBinary(s + '1', n - 1);
    }
  }

  public static void main(String [] args) {
    printAllBinary("", 4);
  }
}

我會讓您找到更有效的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM