leetcode 22

149 阅读1分钟
//数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 
//
// 
//
// 示例 1: 
//
// 
//输入:n = 3
//输出:["((()))","(()())","(())()","()(())","()()()"]
// 
//
// 示例 2: 
//
// 
//输入:n = 1
//输出:["()"]
// 
//
// 
//
// 提示: 
//
// 
// 1 <= n <= 8 
// 
// Related Topics 字符串 回溯算法 
// 👍 1762 👎 0


import java.util.ArrayList;
import java.util.List;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> result = new ArrayList<>();
        backtracking(2,result,0,0,"");
        return result;
    }

    private void backtracking(int n,List<String> result,int left,int right,String str){

        //剪枝
        if(right> left){
            return;
        }

        //符合条件
        if(left == n &&  right == n){
            result.add(str);
            return;
        }

        if(left < n ){
            backtracking(n,result,left+1,right,str + "(");
        }

        if(right < n ){
            backtracking(n,result,left,right+1,str +")");
        }
    }
}
//leetcode submit region end(Prohibit modification and deletion)