前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >输出指定括号对数的所有可能组合

输出指定括号对数的所有可能组合

作者头像
孟君
发布于 2023-02-23 07:29:43
发布于 2023-02-23 07:29:43
8890
举报

如果给出一个正整数,表示一共有多少对括号,如何输出所有括号可能的组合?

比如:给出的括号对数为3, 则所有括号的组合有如下几种:

为了解决这个问题,本文采用两种方式来完成。

  • 广度优先搜索的方式
  • 深度优先搜索的方式

接下来,我们一起来看看广度优先搜索深度优先搜索的思想和具体实现。

广度优先搜索方式

思想

所谓广度优先搜索的方式就是尽可能早的先输出完整的括号对(), 也就是当输出一个左括号 '(' , 尽可能先输出一个右括号 ‘)’ 。

比如要输出括号对数是2对的所有可能,先输出的结果是()(), 而不是(())

我们可以定义三个值来完成递归调用:

什么时候输出一个候选结果?

当剩余左括号数和剩余右括号数都为0的时候。

左括号'('和右括号'')输出的时机?

广度优先搜索的目的是先得到完整的括号对(), 这种情况下需要需要考虑如下两种情况:

  • 输出右边括号')'的时机:如果剩余的右括号数大于剩余的左括号数,那么意味着之前已经有一个左括号输出了,在这种情况下,将当前存放的括号组合情况添加一个右括号,然后剩余右边括号数减1,然后继续递归调用。
  • 输出左边括号'('的时机:如果剩余的左括号数leftCount大于0,则当前存放的括号组合情况添加一个左括号'(', 然后剩余左括号数减1,然后继续递归调用。

有了上述的思想,我们可以很容易写出相应的程序来。具体代码如下:

代码实现

有了广度优先搜索的递归调用函数,广度优先搜索方法就可以调用递归函数即可。当前存放括号内容的变量为空。

深度优先搜索方式

思想

深度优先搜索的思路和广度优先搜索类似,唯一的区别就是先输出完整的括号对,还是先尽可能多地输出左括号。

广度优先搜索的方式就是尽可能早的先输出完整的括号对(), 也就是当输出一个左括号 '(' , 尽可能先输出一个右括号 ‘)’ 。 深度优先搜索的方式就是尽可能早的先输出左括号('', 也就是如果剩余左括号数大于0的时,先获取左边括号'('。

比如要输出括号对数是2对的所有可能,先输出的结果是(()), 而不是()()

和广度优先搜索一样,我们依旧可以定义三个值来完成递归调用:

什么时候输出一个候选结果?

剩余左括号数和剩余右括号数都为0的时候。

左括号'('和右括号'')输出的时机?

深度优先搜索的目的是先尽可能多的得到左括号'(', 这种情况下需要需要考虑如下两种情况:

  • 输出左边括号'('的时机:如果剩余的左括号数leftCount大于0,则当前存放的括号组合情况添加一个左括号'(', 然后剩余左括号数减1,然后继续递归调用。
  • 输出右边括号')'的时机:如果剩余的右括号数大于剩余的左括号数,那么意味着之前已经有一个左括号输出了,在这种情况下,将当前存放的括号组合情况添加一个右括号,然后剩余右边括号数减1,然后继续递归调用。

有了上述的思想,我们可以很容易写出相应的程序来。具体代码如下:

代码实现

有了深度优先搜索的递归调用函数,深度优先搜索方法就可以调用递归函数即可。

完整代码和测试结果

完整代码

测试代码和结果

运行结果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 孟君的编程札记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档