LeetCode——生成括号(java)——回溯算法

生成括号

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 = 3,生成结果为:

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

这也是简单的回溯算法,先写n个左括号,然后就写右括号,每当完成一组之后,就吧字符串存起来。然后再倒退步骤到写第n-1个左括号,然后写右括号,在写左括号,再全写右括号。依次回溯递归,每完成一趟就回到能再改变的位置。

代码如下:

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

public class 生成括号 {
	public List<String> generateParenthesis(int n) {
        List<String> list = new  ArrayList<>();
        chuli("", list, n, n);
        return list;
        }
	public static void chuli(String s, List<String> list,int left, int right) {
		if (left>right) {
			return;
		}
		
		if (left>0) {
			chuli(s+"(", list, left-1, right);
		}
		if (right>0) {
			chuli(s+")", list, left, right-1);
		}
		if (left==0&&right==0) {
			list.add(s);
			return;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/likunkun__/article/details/80378973
今日推荐