原创转载请注明出处:http://agilestyle.iteye.com/blog/2360764
Given Three pairs of "((()))"
Print "()()(), (())(), ()(()), ((()))"
核心思想:递归
package org.fool.java.test;
public class ParenthesisPrintTest {
public static void main(String[] args) {
printParenthesis(3, 3, "");
}
// left and right remains are keeping track of how many remaining parenthesis left for printing
// currentString is used to keep track of the current printout for each recursive call
private static void printParenthesis(int leftRemain, int rightRemain, String currentString) {
if (rightRemain == 0) {
System.out.println(currentString);
return;
}
if (leftRemain > 0) { // more left parenthesis left for printing
printParenthesis(leftRemain - 1, rightRemain, currentString + "(");
if (leftRemain < rightRemain) { // which means more left parenthesis have been used
printParenthesis(leftRemain, rightRemain - 1, currentString + ")");
}
} else { // now there are only right parenthesis left
printParenthesis(leftRemain, rightRemain - 1, currentString + ")");
}
}
}
Console Output
Reference
https://www.youtube.com/watch?v=_Uq1dmgZj0I&list=PLlhDxqlV_-vkak9feCSrnjlrnzzzcopSG&index=48