各位PHP朋友请求一个PHP的算法

发布于 2022-09-12 23:24:48 字数 200 浏览 10 评论 0

数字N代表生产括号的对数,请你设计一个函数?用于能够生产所有可能的并且有效括号组合!
示例1:
输入: N=3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例2:
输入: N=2
输出:["(())","()()"]

示例3:
输入: N=1
输出:["()"]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

仙气飘飘 2022-09-19 23:24:48

其实很简单,解题思路就是用数据结构---栈,去判断括号是不是合法。

(入栈,)出栈,如果合法,最后栈刚好出完了,不会有剩余。

<?php

function generate($n)
{
    $bit = $n * 2;
    $maxData = pow(2, $bit) - 1;
    
    for ($i=0;$i<$maxData; $i++) {
        $bin = decbin($i);
        $bin = str_pad($bin, $bit, 0, STR_PAD_LEFT);
        $arr = [];
        
        $length = strlen($bin);
        for ($j=0;$j<$length;$j++) {
            if ($bin[$j] == '0') {
                array_push($arr, 1);
            } else {
                if (is_null(array_pop($arr))) {
                    continue 2;
                }
            }
        }
        
        if (count($arr) > 0) {
            continue;
        }
        
        echo str_replace(['0', '1'], ['(', ')'], $bin) . PHP_EOL;
    }
}

generate($argv[1]);

在终端命令输入。

 php test.php 3
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文