繁体   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