博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]括号生成(Generate Parentheses)
阅读量:6148 次
发布时间:2019-06-21

本文共 915 字,大约阅读时间需要 3 分钟。

题目描述

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 n = 3,生成结果为:

[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]

解决方法

合法的括号:

  1. 左括号在对应右括号的左边 -> 先添加左括号再添加右括号即可保证左括号在右括号的左边
  2. 相同数量的左右括号 -> 右括号数量 == 左括号数量
  3. 最终形成的字符串长度为n*2,也就是左右括号各n个

根据以上分析使用回溯法

public List
generateParenthesis(int n) { List
res = new ArrayList<>(); process(res, "", 0, 0, n); return res; } /** * @param res 结果 * @param str 结果中的一项 * @param open 左括号数量 * @param close 右括号数量 * @param n 生成的括号对数 */ public void process(List
res, String str, int open, int close, int n) { if (str.length() == n * 2) { res.add(str); } else { if (open < n) process(res, str + "(", open + 1, close, n); if (close < open) process(res, str + ")", open, close + 1, n); } }

本文首发:

转载地址:http://tgmya.baihongyu.com/

你可能感兴趣的文章
私.01.serialport
查看>>
使用LocalBroadcastManager
查看>>
测试开发面试准备之HTTP协议-一次完整的Http请求过程
查看>>
Linux学习笔记11—VSFTP的搭建
查看>>
Python学习(18)面向对象
查看>>
Django级联删除的选项
查看>>
new option
查看>>
ES6初探,什么是ES6
查看>>
ORACLE用户操作的一些常用操作总结【weber出品】
查看>>
redhat9 linux 网卡无法激活排障
查看>>
实践详细篇-Windows下使用VS2015编译安装Caffe环境(CPU ONLY)
查看>>
go 成长路上的坑(1)
查看>>
设计模式之建造者模式
查看>>
T4 assembly
查看>>
zabbix添加nginx中间件监控
查看>>
使用Spire.Doc组件利用模板导出Word文档
查看>>
PF_RING 总结
查看>>
Palindrome Number
查看>>
正向代理与反向代理
查看>>
EditPlus自动补全、模板配置
查看>>