leetcode题目22: 括号生成(java)

2020-06-06  本文已影响0人  castlet

题目描述

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

示例

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

解题思路

代码

public List<String> generateParenthesis(int n) {
    if (n <= 0) {
        return null;
    }
    List<String> result = new ArrayList<>();
    dfs("", 0, 0, n, result);
    return result;
}

/**
 * @param prefix 当前的字符串
 * @param left   左括号用了几个
 * @param right  右括号用了几个
 * @param size   生成括号的对数
 * @param result 结果
 */
void dfs(String prefix, int left, int right, int size, List<String> result) {
    if ( left == right && left == size) {
        // 左右括号使用的个数相同,并且都用完了,则是符合条件的括号组合。
        result.add(prefix);
        return;
    }
    if (left < right) {
        // 如果当前已使用左括号的数量小于右括号的数量,则无法形成有效的括号。直接return。
        return;
    }
    if (left < size) {
        dfs(prefix + "(", left + 1, right, size, result);
    }

    if (right < size) {
        dfs(prefix + ")", left, right + 1, size, result);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读