• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 一道经典的括号匹配笔面问题

一道经典的括号匹配笔面问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了伸缩缝几米一道,股一道长指标公式,一道汤最补男人肾,一道菜祛除体内湿气,小腿上有一道青筋等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:一道经典的括号匹配笔面问题
描述:

来自新浪weibo @陈利人

问题:

左“{”,右”}"括号各N个,请打印出所有正确的组合,比如当N=3,{}{}{},{}{{}},等为正确的组合。如果写的代码是recursive,能否用iterative再写一个;反之亦然。

求好的算法描述. (不用使用循环和递归都做.一种即可.这个用递归更简单些)

py实现:

def foo(output, open, close, pairs):
	if open == pairs and close == pairs:
		print output
	else:
		if open<pairs:
			foo(output+'(', open+1, close, pairs)
		if close<open:
			foo(output+')', open, close+1, pairs)

foo('', 0, 0, 3)

解决方案1:

这个很容易就可以想到用回溯法来做。假设从左往右填括号。

状态包括:
(1) 填到第几个:int i
(2) 在右边最多还能填多少个 "}":int left
(3) 还剩多少个"{"可以填:int a
(4) 还剩多少个"}"可以填:int b

具体策略:
(1) 如果已经填完了,输出,返回(回溯)
(2) 如果还有"{"可以填:填进去,递归填下一个。
(3) 如果还可以填"}"并且还有"}"可以填:填进去,递归填下一个。

实现的代码附在后面。

至于转化成迭代的方式,任何递归都可以通过引入栈的方式来转化,只是写起来比较痛苦,看起来也比较痛苦就是了。

#include <stdio.h>

const int maxn = 50;
char x[maxn * 2 + 1];

void perm(int i, int left, int a, int b) {
    if (a == 0 && b == 0) {
        puts(x); 
        return; 
    }
    if (a > 0) {
        x[i] = '{';
        perm(i + 1, left + 1, a - 1, b);
    }
    if (b > 0 && left > 0) {
        x[i] = '}';
        perm(i + 1, left - 1, a, b - 1);
    }
}

int main() {
    int n = 4;
    x [n * 2] = 0;
    perm(0, 0, n, n);
    return 0;
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 请教一道ARM汇编的题目?
  • 一道经典的括号匹配笔面问题

相关文章

  • 2017-06-07 用redis-sentinel做redis集群,如何实现当master挂掉后,不用修改程序中的配置
  • 2017-06-07 scrapy的log中的"Crawled","scraped"是什么含义
  • 2017-06-07 API接口要怎样实现权限控制?
  • 2017-06-07 python27如何使用30版本的round函数?
  • 2017-06-07 gitlabwebhookphpexec调用shell脚本。shell脚本中调用gitpull命令无法执行。
  • 2017-06-07 静态文件通过PHP返回给客户端,性能折损大么?
  • 2017-06-07 (redis)“过去x天内,被提及最多的若干个TAG”,这样的需求,该怎么设计?
  • 2017-06-07 外链生效,自定义域名的文件什么时候才能生效?
  • 2017-06-07 jbossportal集成
  • 2017-06-07 菜鸟求教一个关于pythonsocket的问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 七牛JS上传ipa和icon后自动生成plist
    • 怎么修改保存的图片路径~
    • iTerm2@后面显示名称的问题
    • laravel52中怎么在模板中引用静态文件的?
    • (redis)像segmentfault做的关注标签功能,其数据库是怎样设计的
    • nginx、uwsgi搭建web服务器,python的osenvironget无法获取到环境变量
    • 有从事Python优化的大牛吗
    • iframe跨域怎么获取七牛返回的结果那
    • (shell)为什么我的NERDTree没有配色和高亮啊
    • Ext中怎么使用SpringSecurity标签呢

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有