• leetcode-22


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

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

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/generate-parentheses
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    class Solution22t {
        public static List<String> generateParenthesis(int n) {
            List<String> ans = new ArrayList();
            backtrack(ans, "", 0, 0, n);
            return ans;
        }
    
        public static void backtrack(List<String> ans, String cur, int open, int close, int max){
            if (cur.length() == max * 2) {
                ans.add(cur);
                return;
            }
    
            if (open < max)
                backtrack(ans, cur+"(", open+1, close, max);
            if (close < open)
                backtrack(ans, cur+")", open, close+1, max);
        }
    
        public static void main(String[] args) {
            generateParenthesis(3);
        }
    }

    这道题的关键在于当open == max的时候,此时cur为((( 

    然后顺序到下面的close < open,第一个ans结果为((())),此时cur.length == max * 2,

    此时需要弹栈到 open == 2了,此时cur为((,顺序到close < open的判断,close此时为0,open为2,然后这层循环后cur为(()

    ...结束

    这道题的关键还是考察递归和回溯的思想,递归就要理解栈的意思,无非是你的每次操作包括变量值都压栈,再弹出。

    一个没有高级趣味的人。 email:hushui502@gmail.com
  • 相关阅读:
    高效实用的.NET开源项目
    【转载】代理模式应用实例
    开源的 Restful Api 集成测试工具 Hitchhiker
    【转载】C#反射机制详解
    Visual Studio提示“无法启动IIS Express Web服务器”的解决方法
    【转载】C#之玩转反射
    python管道pipe
    如何防范短信接口被恶意调用
    TCP三次握手,四次分手
    psycopg事务
  • 原文地址:https://www.cnblogs.com/CherryTab/p/12107621.html
Copyright © 2020-2023  润新知