zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    美团Java实习面试经历(拿到Offer)
    深受程序员鄙视的外行语录!
    3.7 操作数组的工具类-Arrays
    3.6 数组理解
    3.5 基本类型和引用类型变量
    3.4 Java数组类型
    3.3 break、continue、return结束循环结构
    3.2 循环结构
    3.1 Java分支结构
    2、Java运算符
  • 原文地址:https://www.cnblogs.com/CherryTab/p/12107621.html
Copyright © 2011-2022 走看看