如何生成所有可能的有效括号组合?

霞舞
发布: 2025-02-24 23:14:10
原创
497人浏览过

如何生成所有可能的有效括号组合?

如何生成所有可能的有效括号组合?

本文介绍一种利用栈数据结构生成所有有效括号组合的算法。该算法通过跟踪左括号和右括号的数量,确保生成的组合始终保持有效。

算法的核心思想是使用两个计数器分别记录左括号和右括号的数量。 当左括号数量小于给定数量 n 时,可以添加一个左括号;当右括号数量小于左括号数量时,可以添加一个右括号。只有当左括号和右括号数量都等于 n 时,才算生成一个有效的括号组合。

以下是一个 PHP 代码示例,演示了该算法的实现:

<?php
function generateParenthesis($n) {
    $result = [];
    $stack = [];
    $leftCount = 0;
    $rightCount = 0;

    function backtrack($leftCount, $rightCount, $stack, &$result) {
        if ($leftCount === $n && $rightCount === $n) {
            $result[] = implode('', $stack);
            return;
        }

        if ($leftCount < $n) {
            $stack[] = '(';
            backtrack($leftCount + 1, $rightCount, $stack, $result);
            array_pop($stack); // 回溯:移除最后添加的左括号
        }

        if ($rightCount < $leftCount) {
            $stack[] = ')';
            backtrack($leftCount, $rightCount + 1, $stack, $result);
            array_pop($stack); // 回溯:移除最后添加的右括号
        }
    }

    backtrack($leftCount, $rightCount, $stack, $result);
    return $result;
}

$n = 3;
$combinations = generateParenthesis($n);
foreach ($combinations as $combination) {
    echo $combination . PHP_EOL;
}
?>
登录后复制

运行这段代码,输出结果如下:

((()))
(()())
(())()
()(())
()()()
登录后复制

这个改进后的 PHP 代码使用了递归回溯的方法,更加清晰易懂,并且避免了使用位运算和字符串操作的复杂性,提高了代码的可读性和可维护性。 它直接生成有效括号组合,而无需检查无效组合。

以上就是如何生成所有可能的有效括号组合?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号