1. 程式人生 > >LeetCode.22括號生成

LeetCode.22括號生成

題目來源:https://leetcode-cn.com/problems/generate-parentheses/description/

題目描述:

 演算法描述:

1.這個題目可以看成是一個回溯演算法。

2.只要有左括號就先將左括號新增到str字串中進行遞迴,如果沒有左括號,就將右括號新增到str字串中進行遞迴。

直到左右括號數量都為0,說明此時找出一組解,將這組解新增到list集合中。返回到上次遞迴的地方找下一組解。

程式碼如下:

class Solution {
        public List<String> generateParenthesis(int n) {
        List<String> list = new ArrayList<>();
        recursion(n,n,"",list);
        System.out.println(list);
        return list;
    }
    
    //left為剩餘左括號數,right為剩餘右括號數。
    public void recursion(int left,int right,String str,List<String> list){
    	//當左右括號都已匹配完畢,就返回
    	if(left==0&&right==0) {
    		list.add(str);
    		return;
    	}
    	//如果有左括號,當前字串加上左括號,左括號個數-1進入遞迴
    	if(left>0) {
    		recursion(left-1,right,str+"(",list);
    	}
    	//如果當前剩餘右括號個數大於左括號,當前字串加上右括號,右括號個數-1進入遞迴
    	if(left<right) {
    		recursion(left,right-1,str+")",list);
    	}
    }
}