welcome to my blog

LeetCode Top 100 Liked Questions 22. Generate Parentheses (Java版; Medium)

题目描述

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:["((()))","(()())","(())()","()(())","()()()"
]
class Solution {public List<String> generateParenthesis(int n) {List<String> list = new ArrayList<>();if(n==0){return list;}StringBuilder sb = new StringBuilder();core(list, sb, 0, 0, n);return list;}private void core(List<String> list , StringBuilder sb, int L, int R, int n){//if(L==n){int count = 0;while(R<n){sb.append(')');R++;count++;}list.add(sb.toString());for(int i=0; i<count; i++){sb.deleteCharAt(sb.length()-1);}return;}if(L<n){sb.append('(');core(list, sb, L+1, R, n);sb.deleteCharAt(sb.length()-1);}if(R<L){sb.append(')');core(list, sb, L, R+1, n);sb.deleteCharAt(sb.length()-1);}}
}
第一次做, 有点混乱, 想着采用改变现场恢复现场的常规手段做, 结果绕进去了; 混乱的原因在于要控制左括号和右括号的数量, 一般只控制一种字符的数量, 这次控制了俩, 所以乱了, 不过这两种字符的数量是有不等式约束的: 左括号的数量小于等于n, 右括号的熟练小于等于左括号, 做题的时候没有利用这一点; 创建两个变量分别记录左右括号的数量
  • 创建两个变量记录左右括号出现的次数
  • 使用不等式进行约束
/*
原则:
左括号数量小于等于n
右括号数量小于等于左括号数量
*/
import java.util.ArrayList;
import java.util.Stack;class Solution {public List<String> generateParenthesis(int n) {List<String> res = new ArrayList<>();if(n<1)return res;Stack<String> s = new Stack<>();//s.push("(");StringBuilder sb = new StringBuilder();Core(res, "", 0, 0, n);return res;}public void Core(List<String> res, String curr, int open, int close, int n){//base caseif(open==n){//最后要保证左右括号数量相等while(close<open){curr += ")";close++;}res.add(curr);return;}/*另一种base case, 从curr的长度出发if(curr.length()==2*n)res.add(curr);*///只要open小于n, 就可以加(if(open<n){Core(res, curr+"(", open+1, close, n);}//只要close<open, 就可以加)if(close<open){Core(res, curr+")", open, close+1, n);}}
}
题解
class Solution {public List<String> generateParenthesis(int n) {List<String> ans = new ArrayList();backtrack(ans, "", 0, 0, n);return ans;}public void backtrack(List<String> ans, String cur, int open, int close, int max){if (cur.length() == max * 2) {ans.add(cur);return;}if (open < max)backtrack(ans, cur+"(", open+1, close, max);if (close < open)backtrack(ans, cur+")", open, close+1, max);}
}

LeetCode Top 100 Liked Questions 22. Generate Parentheses (Java版; Medium)相关推荐

  1. LeetCode Top 100 Liked Questions 221. Maximal Square (Java版; Medium)

    welcome to my blog LeetCode Top 100 Liked Questions 221. Maximal Square (Java版; Medium) 题目描述 Given a ...

  2. LeetCode面试常见100题( TOP 100 Liked Questions)

    这篇文章是关于LeetCode Top 100 Liked Questions 的 专栏记录,其中部分题目可能包括解题思路和多种优化解法.我把自己的思路都记录在这里,如果你看见了,请记得点个赞吧,蟹蟹 ...

  3. [leetcode] 22. Generate Parentheses

    题目大意 https://leetcode.com/problems/generate-parentheses/description/ 22. Generate Parentheses Given ...

  4. LeetCode Top 100 Liked 点赞最高的 100 道算法题

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:刷题顺序,刷题路径,好题,top100,怎么刷题,Leet ...

  5. [LeetCode] #22 Generate Parentheses

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  6. LeetCode 22. Generate Parentheses

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  7. [leetcode] 22. Generate Parentheses(medium)

    原题 思路: 利用DFS,搜索每一种情况,同时先加"("后加")",保证()匹配正确. 最近开始学习前端,尝试用js来写. const generate = f ...

  8. 【LeetCode从零单排】No22.Generate Parentheses

    题目 Given n pairs of parentheses, write a function to generate all combinations of well-formed parent ...

  9. 22. Generate Parentheses

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  10. 【leetcode刷题】 64.数组的度——Java版

    ⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 看明白了就不难,总结一下就是要找出数组的众数,并且还有找出众数在数组中第一次出现和最后一次出现的位置,两个位置组成区间长度就是答案 ...

最新文章

  1. (转)Unity3D - 性能优化之Draw Call
  2. GitLab首席执行官Sid Sijbrandij畅谈当前开发实践
  3. 20165204 第十周课下作业补做
  4. C++成员对齐方式探讨
  5. vim编辑环境设定[Linux]
  6. css js html记录
  7. QT的QDomAttr类的使用
  8. ubuntu16.04下面安装mongodb
  9. Java历程-初学篇 Day02变量,数据类型和运算符
  10. mac下修改mysql连接数_MySQL最大连接数设置
  11. Doris FE配置参数(全面)
  12. Repeater——数据库控件学习
  13. React Native Android混合开发实战教程
  14. 易点易动助力叮咚买菜数字化管理固定资产和易耗品
  15. 树莓派安装FISCO-BCOS
  16. Minecraft正版账号获得方法
  17. 通用产品 云OA SaaS三管齐下
  18. 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备
  19. asterisk安装、配置
  20. C#模拟鼠标操作以及键盘输入

热门文章

  1. 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-用户系统EP03
  2. java 创建输入流,读取Excel表格 xls格式
  3. 近红外二区染料IRDye QC-1 NHS Ester/NHS 酯
  4. 手机能远程控制手机吗?
  5. 成都android 3年,安卓手机也可以用3年?这3款“钉子户”,使用3年没问题!
  6. OS-2019Pintos第一次实验
  7. 七年级上册计算机工作总结,【2015-2016】初中七年级上册数学教学工作总结
  8. 2021年Android春招面试经历,面试心得体会
  9. 男人一生最该去的12个地方
  10. 第一次接触计算机5年级作文,第一次接触网络