leetcode 括号生成
刷题记录:
说实话,作为大学生,每天面对算法题和项目,确实挺烦心的,但是为了以后工作,不得不面对。
加油把,大学生们
题目
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合
解题思想:
先dfs构建完整的二叉树,也就是,把所有组合的括号的可能性都遍历一次,再通过剪枝,找到有效的括号。
比如n=2
有效括号的规律:"("开阔号小于3,并且 闭括号”)“小于”(“开阔好。两种其中种情况出现就是不符合
package com.wu.leetcode;
import java.util.ArrayList;
import java.util.List;
class 括号生成 {
public static void main(String[] args) {
List<String> list = generateParenthesis(2);
System.out.println(list.toString());
}
public static List<String> generateParenthesis(int n) {
ArrayList<String> list = new ArrayList<>();
//开始 开阔号和闭括号数都是0
dfs(n,"",list,0,0);
return list;
}
//open:开阔号||close:闭括号
private static void dfs(int n,String path,List<String> arr,int open,int close){
//剪枝条件
if (open>n||close>open){
return;
}
//乘2是对数。不管开还是闭,为的是所有情况
if (path.length()==n*2){
arr.add(path);
//回溯
return;
}
//开括号递归
dfs(n,path+"(",arr,open+1,close);
//闭括号递归
dfs(n,path+")",arr,open,close+1);
}
}