我写了一个代码来打印所有有效的n对括号组合.但是,在我第一次尝试时,算法输出所有组合两次,即.代码是:
public static void solve(char[] string, int open, int closed, int index)
{
if (open < 0 || closed < open) {
return;
}
if (open == 0 && closed == 0) {
System.out.println(string);
}
if (open > 0) {
string[index] = '(';
solve(string, --open, closed, ++index);
}
if (closed > open) {
string[index] = ')';
solve(string, open, --closed, ++index);
}
}
Run Code Online (Sandbox Code Playgroud)
我花了很多时间才能看出出了什么问题.我认为代码进入最后一个if分支比它应该更多.然后,在尝试不同的事情时,我意识到了变化
solve(string, --open, closed, ++index);
Run Code Online (Sandbox Code Playgroud)
至
solve(string, open-1, closed, ++index);
Run Code Online (Sandbox Code Playgroud)
改变了结果.这导致了一个java.lang.ArrayIndexOutOfBoundsException
.最后,我用相应的算术运算(例如,++index
to index+1
)替换了所有预增量操作,并且代码正确运行.
我的问题是,不应该 …
我们是一个由十人组成的学生团体.在接下来的几个月里,我们需要共同开展一个大项目.因此,我们认为如果我们使用VCS会更好.
该组中的许多人使用git,但我们需要一个提供私有存储库和协作的Web托管.据我所知,bitbucket提供免费的私人存储库,但我想问一下我们是否有更好的选择.
它不一定是git.我们乐于学习新事物.