力扣每日一题4.9括号生成

1.题目

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

 

示例:

输入:n = 3
输出:[
       "((()))",
       "(()())",
       "(())()",
       "()(())",
       "()()()"
     ]

3.解答

1.使用深度优先搜索

class Solution {
    static List lists=new ArrayList();
    public static List generateParenthesis(int n) {
        backtrack("",0,0,n);
	return lists;
    }
    private static void backtrack(String str, int left, int right, int n) {
	if(left+right==n*2){
	    lists.add(str);
	    return;
	}
	if(left

2.使用广度优先搜索 

public class Node {//自定义类
	String str;//表示当前字符串
	int left;  //表示当前字符串中左括号的个数
	int right;  //表示当前字符串中的有括号的个数
	public Node(String str,int left,int right){
	    this.str=str;
	    this.left=left;
	    this.right=right;
	}
}
class Solution {
	public  List generateParenthesis(int n) {
	    List lists=new ArrayList();
	    Queue queue=new LinkedList();
	    queue.add(new Node("",0,0));
	    while(!queue.isEmpty()){
	        Node node=queue.poll();
	        if(node.left+node.right==2*n){//若左括号和右括号的个数之和为2n,则为最终结果
	            lists.add(node.str);
	        }
	        if(node.left

 

你可能感兴趣的:(LeetCode)