1
对于Java练习,我开始研究一种方法countBinary
,该方法接受一个整数n
作为参数,打印所有具有n
数字的二进制数字,将每个值打印在单独的行上。假设n为非负数且大于0,则某些示例输出看起来像this。Java - 复杂递归回溯
我几乎没有这个地方。我能够编写一个程序,查找所有可能的String
字母组合以及类似的东西,但我一直无法使用二进制和整数对这个特定问题取得任何进展。
显然,解决此问题的最佳方法是定义一个帮助器方法,该方法接受与原始方法不同的参数,并将最终打印的字符串集合为一组字符。
重要说明:本练习中我不应该使用for循环。
编辑 - 重要提示:我需要拖尾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;
}
}
当我运行我的代码我的输出看起来像this。
任何人都可以向我解释为什么我的方法没有按照我期望的方式运行,并且如果可能的话向我显示解决方案,以便我可以得到正确的输出?谢谢!
谢谢!我将用它作为未来问题的一个模板,我一定会继续研究它,直到我完全理解你用递归完成了什么。你帮了很多! – Trafton