回溯法

Posted naonaoling

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回溯法相关的知识,希望对你有一定的参考价值。

22. 括号生成

递归回溯:

1)结束点:右括号有n个,生成一条path,返回

2)如果右括号小于n个,对于当前可以有两种继续的方式:

  2.1)左括号不足n个,加一个左括号继续递归

  2.2)右括号小于左括号,加一个右括号继续递归

如何体现回溯的思想?递归return就相当于回到了上一个结点。

相似的题目:路径等等(反回一个list,一个list里面的子元素单独求解。)

 1 class Solution {
 2     List<String> res = new ArrayList<>();
 3     public List<String> generateParenthesis(int n) {
 4         gene("", 0, 0, n);
 5         return res;
 6     }
 7     public void gene(String path, int left, int right, int max){
 8         if(right == max){
 9             res.add(path);
10             return;
11         }
12         if(left < max){
13             gene(path+"(", left+1, right, max);
14         }
15         if(right<left){
16             gene(path+")", left, right+1, max);
17         }
18     }
19 }

 

以上是关于回溯法的主要内容,如果未能解决你的问题,请参考以下文章

用回溯法求01背包问题,怎样使用C++模板啊,迫切求指点!

用回溯法做0-1背包问题,这两行(程序中标注)是干嘛?为啥又要减?

回溯法八皇后问题(递归和非递归)

暴力穷举和回溯法(八皇后问题)

0-1背包问题如下,画用回溯法求解时的搜索情况,急用啊

[XJTUSE 算法设计与分析] 第五章 回溯法