任務:查找包含N個開放括號和N個右括號的常規括號表達式的數量。 N是從鍵盤輸入的。無法理解「括號對組合」算法?
我發現這個算法解決並試圖理解它。
public static void addParen(ArrayList<String> list, int leftRem, int rightRem, char[] str, int count) {
if (leftRem < 0 || rightRem < leftRem) return; // some state
if (leftRem == 0 && rightRem == 0) { /* no additional left parentheses */
String s = String.copyValueOf(str);
list.add(s);
} else {
/* Add left parenthesis if there are parentheses of any kind */
if (leftRem > 0) {
str[count] = '(';
addParen(list, leftRem - 1, rightRem, str, count + 1);
}
/* Add a right parenthesis if the expression is true */
if (rightRem > leftRem) {
str[count] = ')';
addParen(list, leftRem, rightRem - 1, str, count + 1);
}
}
}
public static ArrayList<String> generateParens(int count) {
char[] str = new char[count * 2];
ArrayList<String> list = new ArrayList<String>();
addParen(list, count, count, str, 0);
return list;
}
但它能做只有第一個結果字符串: ((()))
它是如何工作的延續?我們如何得到其他括號? 也許你可以提出編程這個任務的其他版本?
如果count = 3,結果:
((()))
(()())
(())()
()(())
()()()
請讓我們知道什麼樣的結果的算法,預計將產生。 – dasblinkenlight
什麼是*任務*? – SHG
iuliq我也迷失在方括號內;(:D – strash