题解 | #牛圈围栏问题#

牛圈围栏问题

https://www.nowcoder.com/practice/4e3bb97bbc2b4382a745abe953f44aee

考察的知识点:回溯;

解答方法分析:

  1. 创建一个空的字符串cur,用来存储当前生成的括号序列。
  2. 创建一个整数变量openCount和closeCount,分别用来记录已经的左括号和右括号的数量。
  3. 创建一个容器result,用来存储所有可能的括号序列。
  4. 在回溯函数中,首先判断边界条件,如果已经使用的左括号数量大于等于n,且已经使用的右括号数量等于n,则说明已经生成了一个有效的括号序列,将其添加到result中并返回。
  5. 在回溯函数中,首先尝试添加一个左括号到当前序列中,同时递增openCount,并递归调用回溯函数。
  6. 在递归调用返回后,回溯函数中将openCount递减,并尝试添加一个右括号到当前序中,同时递增closeCount,并递归调用回溯函数。
  7. 在递归调用返回后,回溯函数中将closeCount递减,并将当前添加的括号从序列中删除,即恢复到之前的状态。
  8. 在主函数中,调用回溯函数生成所有可能的括号序列,并返回结果result。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    vector<string> generateParenthesis(int n) {
        vector<string> result;
        backtrack(n, n, "", result);
        return result;
    }

  private:
    void backtrack(int openCount, int closeCount, string cur,
                   vector<string>& result) {
        if (openCount == 0 && closeCount == 0) {
            result.push_back(cur);
            return;
        }
        if (openCount > 0) {
            backtrack(openCount - 1, closeCount, cur + "(", result);
        }
        if (closeCount > openCount) {
            backtrack(openCount, closeCount - 1, cur + ")", result);
        }
    }
};

全部评论

相关推荐

哞客37422655...:兄弟别慌!💪 民办本找实习确实难点,但不是没机会。100+简历才2个面试,可能简历需要优化下: 项目经历写具体点,突出测试用例、bug数量等 技能栏把测试工具/方法论写清楚 可以考虑降低预期,先进小厂积累经验 测试岗相对好进,坚持投!现在才半个月,有人投3个月才上岸的😭 加油,offer在路上了🚀
点赞 评论 收藏
分享
2025-12-16 21:41
长沙理工大学 Java
程序员牛肉:就是标准的NPC简历,你平时刷牛客的话就知道你这种普通学历+两个项目的简历一抓一大把。 后面海投找实习+想办法给自己简历找亮点
实习简历求拷打
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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