【LeetCode-面试算法经典-Java实现】【022-Generate Parentheses(生成括号)】
2015-07-23 07:52
841 查看
【022-Generate Parentheses(生成括号)】
【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
原题
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.For example, given n = 3, a solution set is:
"((()))", "(()())", "(())()", "()(())", "()()()"
题目大意
给定n对括号,输出他们所有正确的组合解题思路
采用递归求解试代码实现
算法实现类import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /** * Author: 王俊超 * Date: 2015-06-22 * Time: 11:13 * Declaration: All Rights Reserved !!! */ public class Solution { public List<String> generateParenthesis(int n) { // 保存结果的队列 List<String> result = new ArrayList<>(); // 括号数大于0 if (n > 0) { // 捛使用数组 char[] parentheses = new char[2 * n]; // 问题求解 solve(n, n, parentheses, result); } return result; } /** * @param left 剩余可用的左括号数 * @param right 剩余可用的右括号数 * @param parentheses 到上一次为止括号使用的情况 * @param result 存放结果的集合 */ public void solve(int left, int right, char[] parentheses, List<String> result) { // 剩下的括号数不能小于0,并且每次剩下的右括号数都不能小于左括号数 if (left < 0 || right < 0 || right < left) { // 什么都不用做 } // 左右括号都被使用完了 else if (left == 0 && right == 0) { result.add(new String(parentheses)); } // 可以使用 else { // 当前使用的位置 int idx = parentheses.length - left - right; // 使用左括号 parentheses[idx] = '('; // 递归求解 solve(left - 1, right, parentheses, result); // 使用右括号 parentheses[idx] = ')'; solve(left, right - 1, parentheses, result); } } }
评测结果
点击图片,鼠标不释放,拖动一段位置,释放后在新的窗口中查看完整图片。特别说明
欢迎转载,转载请注明出处【/article/1343440.html】
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【021-Merge Two Sorted Lists(合并两个排好序的单链表)】
- 黑马程序员——自学总结(三)集合框架
- 所有程序员都应该遵守的 11 条规则
- 想成为PHP程序员正确的步骤
- 你知道怎样从小白变大神么?
- 面试问题集锦1
- Java面试题-->HashMap的工作原理
- 黑马程序员----JAVA基础----IO流_2
- Web前端面试常识
- 大图片加载问题理解解决面试官问
- 黑马程序员——第八天(String类)
- 黑马程序员——自学总结(二):字符串
- 黑马程序员—— 7,内部类
- (转)Android面试题
- 职业素养!
- 黑马程序员-------java基础-IO(1)
- 黑马程序员--多线程
- [面试相关] 100个iOS开发面试题 你将如何应对
- [转载]怎么写出一本程序员风格的修真小说?
- 黑马程序员——java基础——反射机制的学习