class Solution { public List<String> generateParenthesis(int n) { List<String> ans = new ArrayList<String>(); StringBuilder temp = new StringBuilder(); dfs(0, n, ans, temp, 0, 0); return ans; } public void dfs(int i, int n, List<String> ans, StringBuilder temp, int leftcount, int rightcount){ if(temp.length() == 2*n){ ans.add(temp.toString()); return; } if(leftcount < n){ temp.append('('); leftcount ++; dfs(i + 1, n, ans, temp, leftcount, rightcount); temp.deleteCharAt(temp.length() - 1); } if(rightcount < leftcount){ temp.append(')'); dfs(i + 1, n, ans, temp, leftcount, rightcount + 1); temp.deleteCharAt(temp.length() - 1); } } }
时间: 2024-04-18 19:32:55 浏览: 36
深入理解Java:String
这段代码看起来是一个生成有效括号对的函数。它使用了深度优先搜索(DFS)的方法来生成所有可能的括号组合。代码中的 `generateParenthesis` 函数接受一个整数 `n`,表示要生成的括号对数目。它创建一个空列表 `ans` 用于存储结果,以及一个空的字符串构建器 `temp` 用于构建括号组合。然后调用 `dfs` 方法进行递归搜索。
在 `dfs` 方法中,首先检查当前构建的字符串 `temp` 的长度是否等于 `2*n`,如果是,则将其转换为字符串并添加到结果列表 `ans` 中,然后返回。否则,继续构建括号组合。
接下来,通过比较 `leftcount` 和 `n` 来确定是否可以添加左括号 `'('`。如果 `leftcount < n`,则可以添加左括号。在添加左括号后,递增 `leftcount`,并继续递归调用 `dfs` 方法。然后,删除最后一个字符,以便尝试其他可能的组合。
然后,通过比较 `rightcount` 和 `leftcount` 来确定是否可以添加右括号 `')'`。如果 `rightcount < leftcount`,则可以添加右括号。在添加右括号后,递增 `rightcount`,并继续递归调用 `dfs` 方法。最后,删除最后一个字符,以便尝试其他可能的组合。
这样,通过递归调用 `dfs` 方法,可以生成所有可能的括号组合,并将其添加到结果列表中。最后,返回结果列表作为生成的括号对。
阅读全文