数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
Ref Link:https://leetcode.cn/problems/generate-parentheses/
Difficulty:Medium
Tag:String,Back Tracking
Updated Date:2023-09-08
示例1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1
输出:["()"]
1 <= n <= 8
class Solution {
public List generateParenthesis(int n) {
List result = new ArrayList<>();
if (n <= 0) return result;
backTracking("", result, n, 0, 0);
return result;
}
public void backTracking(String str, List result, int size, int leftNum, int rightNum) {
if (leftNum == size && rightNum == size) {
result.add(str);
return;
}
if (leftNum < size) {
backTracking(str+"(", result, size, leftNum + 1, rightNum);
}
if (rightNum < size && leftNum > rightNum) {
backTracking(str+")", result, size, leftNum, rightNum+1);
}
}
}
8/8 cases passed (1 ms)
Your runtime beats 72.75 % of java submissions
Your memory usage beats 39.74 % of java submissions (41.2 MB)
,在回溯过程中,每个答案需要 O(n)的时间复制到答案数组中。