递归:回溯法,括号生成

题目:https://www.nowcoder.com/practice/c9addb265cdf4cdd92c092c655d164ca?tpId=295&tqId=725&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj
生成括号一直是自己理不清楚的题目,总在想到底是怎么个回溯法。现在代码比较简洁,一眼就能看得明白。
首先定义一个res列表,接下来开始回溯。
回溯条件要有一个字符串str,左括号l,右括号r,输入的n,和res列表,接下来是判断条件,当字符串长度等于2n时说明括号数已经满足,加入res。
如果左括号l的个数小于n(注意这里是n也就是一半,自己体会)就继续回溯,回溯条件是str加入一个左括号,然后l+1.
如果右括号的数量小于左括号,那么有括号的数量理所应当也要加,回溯条件是str加一个右括号,然后r+1.
图片说明

package com.kuang.reflection;

import java.util.*;

public class Test07 {
    public ArrayList<String> generateParenthesis(int n) {
        ArrayList<String> result = new ArrayList<>(10);
        backtrack("", 0, 0, n, result);
        return result;
    }

    private void backtrack(String string, int open, int close, int n, ArrayList<String> result) {
        if (string.length() == n << 1) {
            result.add(string);
            return;
        }
        if (open < n) {
            backtrack(string+"(", open+1, close, n, result);
        }
        if (close < open) {
            backtrack(string+")", open, close+1, n, result);
        }
    }

    public static void main(String[] args) {
        System.out.println(10 >> 1);
    }


}
全部评论
这道题我也折腾了好久
1 回复 分享
发布于 2022-07-29 18:56

相关推荐

hwwhwh:同双非,有大厂实习其实也没啥用,主要看运气,等就行了
点赞 评论 收藏
分享
只因飞飞:今日首绷
点赞 评论 收藏
分享
评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务