zoukankan      html  css  js  c++  java
  • 22. 括号生成

    知乎ID: 码蹄疾 
    码蹄疾,毕业于哈尔滨工业大学。 
    小米广告第三代广告引擎的设计者、开发者; 
    负责小米应用商店、日历、开屏广告业务线研发;
    主导小米广告引擎多个模块重构; 
    关注推荐、搜索、广告领域相关知识;

    题目

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

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

    分析

    做题题感也蛮重要的,凡是这种生成全排列,满足条件的排列,大部分情况下都要用递归。
    首先左右括号必须相等。先确定前缀,然后递归,递归条件就是剩下的左括号数目,和剩下的右括号数目。
    比如:
    ( ,  leftCount = 1, rightCount = 0;
    就可以把题目转化为:在左括号数目为3-1 = 2,右括号数目是3 - 0 = 3的解。

    code

    public class Solution {
        public List<String> generateParenthesis(int n) {
            ArrayList<String> list = new ArrayList<String>();
            String s = "";
            parenthesis(list, s, n, n);
            return list;
        }
    
        public void parenthesis(ArrayList<String> list, String s, Integer left, Integer right) {
            if (left == 0 && right == 0) {
                list.add(s);
            }
    
            if (left > 0) {
                parenthesis(list, s + '(', left - 1, right);
            }
            if (right > 0 && left < right) {
                parenthesis(list, s + ')', left, right - 1);
            }
        }
    }

       微信扫码关注更多题解!

  • 相关阅读:
    w3c标准
    HTML+CSS理解
    Mybatis源码日记(一)
    Sqlmap学习笔记(三)
    EasyExcel读取跨行单元格数据为空的解决办法
    Sqlmap学习笔记(二)
    Sqlmap学习笔记(一)
    Linux安装运行Typora
    Kafka环境搭建
    Mysql主从配置
  • 原文地址:https://www.cnblogs.com/acceml/p/9282035.html
Copyright © 2011-2022 走看看