[英]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.