LeetCode--22. 括號生成

在這裏插入圖片描述

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);
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章