LeetCode刷题笔记-回溯法-括号生成
题目描述:
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
分析:
方法2:回溯法
1、对于每个位置都有两种选择左括号,和有括号。
2、对于每个位置都依此添加左括号,和有括号,若是不符合条件,立马停止当前分支的的继续前行。
方法1,是用的是贪心法,
1、在n=3的是在n=2的基础上,分别在左侧,右侧,外侧添加括号。
java实现
class Solution {
//特此声明:我没错,辣鸡后台。我就没错!!!写此注释,以表抗议!!
public List<String> generateParenthesis2(int n) { //这是方法1,,,用的可能是贪心算法。。
List<String> list = new ArrayList<>();
if (n<1)
return list; list.add("()");
if (n==1)
return list; String str="()";
String s="";
for (int i=2;i<=n;i++) {
int j=0;
int list_len= list.size(); //先算好,别他娘的放到循环中,哼!!!!!! int k=j;
for (j = 0; j < list_len; j++) { //把list所有元素取出来,每个分别处理一遍,相对于队。 s = list.get(k);
String left = "()" + s;
String mid = "(" + s + ")";
String right = s + "()";
list.add(mid);
list.add(left);
if (!left.equals(right)) {
list.add(right);
}
list.remove(s);
}
}
return list;
} public List<String> generateParenthesis(int n){
List<String> result=new ArrayList<>();
gen(result,"",n,n);
return result;
} public void gen(List<String> result,String str,int l,int r){
if (l==0 && r==0){
result.add(str);
return;
}
if( l>r || l<0 || r<0)
return ;
String str2=new String(str); ////*****这波操作,看清楚喽,每个位置就两种情况,就不写for循环了
gen(result,str+="(",l-1,r);
gen(result,str2+=")",l,r-1); }
}
LeetCode刷题笔记-回溯法-括号生成的更多相关文章
- LeetCode刷题笔记-回溯法-分割回文串
题目描述: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab"输出:[ ["aa", ...
- LeetCode刷题笔记-回溯法-组合总和问题
题目描述: <组合总和问题>给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. cand ...
- LeetCode刷题笔记-贪心法-格雷编码
题目描述: 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列.格雷编码序列必须以 0 开头. 来源:力扣(Leet ...
- LeetCode刷题笔记和想法(C++)
主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...
- LeetCode刷题191203 --回溯算法
虽然不是每天都刷,但还是不想改标题,(手动狗头 题目及解法来自于力扣(LeetCode),传送门. 算法(78): 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明: ...
- 18.9.10 LeetCode刷题笔记
本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...
- LeetCode刷题笔记 - 12. 整数转罗马数字
学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...
- Leetcode刷题笔记(双指针)
1.何为双指针 双指针主要用来遍历数组,两个指针指向不同的元素,从而协同完成任务.我们也可以类比这个概念,推广到多个数组的多个指针. 若两个指针指向同一数组,遍历方向相同且不会相交,可以称之为滑动窗口 ...
- Leetcode刷题笔记(Python 找出所有相加之和为n的k个组合,组合中只允许含有1-9的正整数,并且每种组合中不存在重复的数字。)
eg:输入:k=3,n=9 输出: [[1,2,6],[1,3,5],[2,3,4]] 输入:k=2,n=5 输出:[[1,4][2,3]] #!/usr/bin/env python # -*- c ...
随机推荐
- Delphi动态添加控件
{动态添加导航} var Panl:Tpanel; MainPage,Subpage:TPageControl; TabSheet1: TTabSheet; ToolBar2: TToolBar; S ...
- (转)OpenFire源码学习之十二:HttpBind&Script Syntax
转:http://blog.csdn.net/huwenfeng_2011/article/details/43417343 HttpSessionManager 该类管理所有通过httpbing连接 ...
- tp5.1 模型 where多条件查询 like 查询 --多条件查询坑啊!!(tp5.1与tp5.0初始化控制器不一样)
tp5.1与tp5.0初始化控制器不一样!!!!!!!!!! 多条件 where必须 new where() ---------------------------------------tp5.1 ...
- chromedriver安装(谷歌浏览器驱动安装)
如果程序执行错误,浏览器没有打开,那么应该是没有装 Chrome 浏览器或者 Chrome 驱动没有配置在环境变量里.下载驱动,然后将驱动文件路径配置在环境变量即可. chromedriver下载地址 ...
- robotframework + selenium2library 一点测试的经验
1 对于元素的外层包括frame/iframe标签的.一定要先select frame name=xxx,然后再操作元素. Select frame name=新建个案 click element ...
- gcc将c源文件中的宏展开
1: sudo gcc -P -I. -I../instrument/stubs -I../instrument/stubs -I../ -E ctrl_xfer32.cc -o preprocess ...
- String、StringBuffer、StringBuilder有什么区别?
1.在字符串不经常发生变化的业务场景优先使用String(代码更清晰简洁).如常量的声明,少量的字符串操作(拼接,删除等). 2.在单线程情况下,如有大量的字符串操作情况,应该使用StringBuil ...
- 【NodeJS】Error: Cannot find module 'ms'
报错原因: Error: Cannot find module 'ms' at Function.Module._resolveFilename (module.js::) at Function.M ...
- Spring MVC源码分析(三):SpringMVC的HandlerMapping和HandlerAdapter的体系结构设计与实现
概述在我的上一篇文章:Spring源码分析(三):DispatcherServlet的设计与实现中提到,DispatcherServlet在接收到客户端请求时,会遍历DispatcherServlet ...
- 【gcc】更新下载编译gcc遇到的各种问题
帮学长的oj升级gcc版本.遇到了贼多问题.. [悲惨的开始] 安装gcc版本推荐ustc的mirror的下载,超快der... https://mirrors.ustc.edu.cn/gnu/gcc ...