【搜狐笔试】显示所有正确的括号匹配
来源:互联网 发布:数据库归档日志满了 编辑:程序博客网 时间:2024/05/16 06:37
个人主页:http://guanzi.info
原文链接:http://guanzi.info/?p=21
题目:
编程实现所有括号的合法匹配。实例如下:
输入 3
输出 ((())) (()()) (())() ()(()) ()()()
解题思路:
学名为:深度优先搜索(DFS) 这是看别人的文章得到的名称。。。
代码如下:
#include "stdafx.h"#include "iostream"#include "stdio.h"#include <vector>#include <string>using namespace std;void func(int left, int right , vector<char>& str){if( left != 0 ){str.push_back( '(' );func( left-1, right, str);str.pop_back();}if ( right != 0){if ( left < right){str.push_back( ')' );func( left, right-1, str);str.pop_back();}}if ( right == 0 ){for( int i = 0; i < str.size(); i++)cout << str[i];cout << endl;}return;}int main( ){int n;vector<char> str;cin >> n;func( n, n, str);return 1;}
程序运行状态解释如下:
输入 3
函数调用栈如下
step1:
func(3,3) push( “(” 调用func(2, 3)
step2:
func(2,3) push ( “((” 调用func(1, 3)
func(3,3)
step3:
func(1,3) push ( “(((” 调用func(0, 3)
func(2,3)
func(3,3)
step4:
func(0,3) push) “((()” 调用func(0, 2)
func(1,3)
func(2,3)
func(3,3)
...此处不再赘述
step7:
func(0,0) print “((()))” return
func(0,1)
func(0,2)
func(0,3)
func(1,3)
func(2,3)
func(3,3)
接下来这一步是看懂这个递归的重点
step8:
func(0,1) pop “((())” return
func(0,2)
func(0,3)
func(1,3)
func(2,3)
func(3,3)
step9:
func(0,2) pop “((()” return
func(0,3)
func(1,3)
func(2,3)
func(3,3)
step10:
func(0,3) pop “(((” return
func(1,3)
func(2,3)
func(3,3)
此处的处理是第二个重点。程序开始第二次遍历
step11:
func(1,3) pop “((” push) “(()” 调用func(1, 2)
func(2,3)
func(3,3)
step12:
func(1,2)push( “(()(” 调用func(0, 2)
func(1,3)
func(2,3)
func(3,3)
此处省略部分步骤
step k:
func(0,0)print “(()())” return
func(0,1)
func(0,2)
func(1,2)
func(1,3)
func(2,3)
func(3,3)
继续省略一些过程
step l:
func(2,3)pop “(” push) “()” 调用func(2, 2)
func(3,3)
- 【搜狐笔试】显示所有正确的括号匹配
- [搜狐笔试]显示所有正确的括号匹配
- 求出对应N的所有合法匹配括号 (DFS)---小米笔试题
- 打印括号匹配的所有排列
- 算法学习-所有括号匹配的字符串
- 判断括号匹配是否正确:
- 正确匹配的最长的括号子串
- 括号匹配算法的一种正确实现(java)
- 京东笔试 括号匹配
- 打印所有匹配括号组合
- 搜狐齐全的笔试题
- 搜狐齐全的笔试题
- 打印n对括号匹配的所有组合
- 输出n对括号所有有效的匹配 java实现
- 给定n对括号,编写一个函数来生成正确括号的所有组合。
- 给定n对括号,编写一个函数来生成正确括号的所有组合。
- 判断一个含多种括号的字符串是否匹配正确 (如(([]))正确,[[(()错误)
- 笔试题检验括弧的匹配是否正确 (){}【】《》
- POJ 1276 cash machine
- oracle 表空间管理
- 基于Linux的嵌入式系统全程喂狗策略
- poj 3221 Diamond Puzzle (BFS)
- linux下mysql备份数据入门
- 【搜狐笔试】显示所有正确的括号匹配
- MyEclipse+MySql插入中文乱码问题解决
- oracle drop table(表)数据恢复方法
- hdu 2586 How far away ?
- hdu 2586 How far away ?【最近公共祖先】
- hdu 1097 A hard puzzle
- 403 Forbidden怎么解决
- POJ 1144 Network
- 海量数据查询优化