天天看点

BM60 括号生成1 题目2 解析

内容介绍

  • 1 题目
  • 2 解析

1 题目

BM60 括号生成1 题目2 解析

2 解析

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return string字符串ArrayList
     */
    ArrayList<String> ret = new ArrayList<>();
    public ArrayList<String> generateParenthesis (int n) {
        // write code here
        StringBuilder s = new StringBuilder();
        backTacing(0, 0, n, s);
        return ret;
    }
    public void backTacing(int left, int right, int n, StringBuilder s){
        if(left == n && right == n){
            // 注意在递归的过程中只有一个s对象,所以要用new string方法将合适的s保存
            ret.add(new String(s));
            return;
        }
        // 当左括号的数量小于n的时间可以进入语句继续往下递归
        if(left < n){
            backTacing(left + 1, right, n, s.append("("));
            s.deleteCharAt(s.length() - 1);
        }
        // 注意右括号的数量必须小于左括号的数量
        if(right < n && right < left){
            backTacing(left, right + 1, n, s.append(")"));
            s.deleteCharAt(s.length() - 1);
        }
    }
}