leetcode22. 括号生成(mid)


力扣链接

题目描述

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入:n = 1
输出:["()"]

提示:

  • 1 <= n <= 8

解题思路

官方题解链接

  • 回溯

我自己写的回溯代码很冗余而且debug了半天才通过,想法和官方题解方法二是一样的。

代码(回溯)

class Solution {
    
    
    public List<String> generateParenthesis(int n) {
    
    
        List<String> list = new ArrayList<>();
        recur(n, 0, 0, new StringBuilder(), list);
        return list;
    }

    /**
     *
     * @param n 括号对数
     * @param leftNum 左括号数
     * @param rightNum 右括号数
     * @param builder 字符串构造
     * @param list 存储所有可能的括号对
     */
    void recur(int n, int leftNum, int rightNum, StringBuilder builder, List<String> list) {
    
    
        if (builder.length() == n * 2) {
    
    
            list.add(builder.toString());
            return;
        }

        if (leftNum < n) {
    
    
            builder.append("(");
            recur(n, leftNum + 1, rightNum, builder, list);
            builder.deleteCharAt(builder.length() - 1);
        }

        if (rightNum < leftNum) {
    
    
            builder.append(")");
            recur(n, leftNum, rightNum + 1, builder, list);
            builder.deleteCharAt(builder.length() - 1);
        }
    }
}


复杂度

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43478625/article/details/121737478