• [LeetCode] Generate Parentheses


    https://leetcode.com/problems/generate-parentheses/?tab=Description

    这道题虽然最后的代码简单,但是想到怎么做却并不容易。后来也是看了discuss才会做...递归的思路是分别跟踪当前剩余的左括号和右括号数量,然后分出两支:

    1. 加一个左括号,并往下递归;
    2. 如果剩余右括号数多于剩余左括号数,则加右括号,并往下递归;否则什么也不做

    注意在分支2中,“剩余右括号数多于剩余左括号数”这个条件很重要,有了这个条件的约束,可以避免不合法的括号组合,比如n=2,")()("就是不合法的组合。

    /*
     * author : TK
     * date   : 2017-02-15
     * problem: LeetCode 22. Generate Parentheses
     * method : Depth-First-Search
     * lang   : C++
     */
    class Solution {
    public:
        vector<string> generateParenthesis(int n) {
            vector<string> ret;
            
            string str = "";
            dfs(ret, str, n, n);
            
            return ret;
        }
        
        void dfs(vector<string>& ret, string str, int left_remain, int right_remain) {
            if (left_remain == 0 && right_remain == 0) {
                ret.push_back(str);
                return;
            }
            if (left_remain > 0) dfs(ret, str + "(", left_remain - 1, right_remain);
            if (right_remain > left_remain) dfs(ret, str + ")", left_remain, right_remain - 1);
        }
    };
    
  • 相关阅读:
    Python格式化字符 %s %d %f
    FTP学习笔记
    万维网
    TCP笔记
    TCP流量控制
    笔记传输层
    传输层协议
    网络层
    以太网笔记
    计算机网络物理层
  • 原文地址:https://www.cnblogs.com/ilovezyg/p/6403620.html
Copyright © 2020-2023  润新知