class Solution {
public List<String> generateParenthesis(int n) {
//回溯思想,需要加強練習
List<String> result = new ArrayList<>();
generateOneByOne("", result, n, n);//最開始是空字符串,還剩n個左右括號
return result;
}
/**
* 其實就是給你2n個格子,問你有效括號的組合數,第幾層遞歸,就是處理第幾個格子上的括號,判斷放左還是放右
* @param sublist
* @param result 結果集
* @param left 還剩多少左括號
* @param right 還剩多少右括號
*/
public static void generateOneByOne(String sublist ,List<String> result, int left,int right) {
if (left == 0 && right == 0) { // 括號都用完了,sublist組裝完畢
result.add(sublist);
return ;
}
//每一層的遞歸,需要判斷
if (left > 0) {//還有剩餘的左括號,那這個格子就可以放左括號
generateOneByOne(sublist + "(", result, left-1, right);
}
if (right > left) {//只有剩餘的右括號多於左括號時,這個格子纔可以放右括號
//比如()()_ _,那第五層遞歸就不能放右括號,因爲剩餘的左右括號相等
generateOneByOne(sublist + ")", result, left, right-1);
}
}
}
LeetCode--22. 括號生成
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.