Leetcode 22 Generate Parentheses 括号生成,回溯

其实回溯,我本来就不熟悉,只知道和栈相关,这道题被困住了,我就看了一遍,回溯算法的介绍,理解了其中关键和空间结构的选择有关,最常见的就是树结构。树的深度遍历,是有层次的(level),是可以倒退的(level--),哈哈,同时这道题有个局限就是,left(左括号)一定要大于等于right(右括号)。

题目要求:

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:

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

解题方法:


package test;

import java.util.ArrayList;
import java.util.List;

public class LC22Try3
{
	public List<String> generateParenthesis(int n)
	{
		List<String> ret = new ArrayList<String>();
		if(n==0){
			return ret;
		}		
		String s="(";
		dpTree(n,1,0,s,ret);
		return ret;
	}
	public void dpTree(int level,int left,int right,String s,List<String> ret){
		if(left>=level){
			if(right<left){
				for(int j=right+1;j<=left;j++){
					s+=")";
				}				
			}
			ret.add(s);
			return;
		}
		
		dpTree(level,left+1,right,s+'(',ret);
		if(right<left){
			dpTree(level,left,right+1,s+')',ret);
		}
		
	}
	public static void main(String[] args)
	{
		LC22Try3 t = new LC22Try3();
		List<String> ret= t.generateParenthesis(3);
		for(int i=0;i<ret.size();i++){
			System.out.println(ret.get(i));
		}
	}

}
思路上,有点儿,慢了,希望进步,加油

哈哈

猜你喜欢

转载自blog.csdn.net/ata_123/article/details/80887063
今日推荐