程序员面试金典——9.6合法序号序列判断
Solution1:我的答案
问题1:判断n对括号序列是否合法。规定合法序列中只包含’(‘和’)‘字符,所以比较容易。’(‘和’)'合法配对即是合法。比较好的方法是基于辅助栈来做。
class Parenthesis {
public:bool chkParenthesis(string A, int n) {// write code hereif(n <= 1)return false;stack<char> temp;temp.push(A[0]);for(int i = 1; i < A.size(); i++) {if(!temp.empty() && temp.top() == '(' && A[i] == ')')temp.pop();else temp.push(A[i]);}if(temp.empty())return true;else return false;}
};
Solution 2:
问题2:
1)n对括号的合法排列个数是多少?
2)打印出n对括号的所有合法排列?
参考网址:https://blog.csdn.net/ffmpeg4976/article/details/42340379?utm_source=blogxgwz0
对于n对括号,合法的排列共有C(n,2n)−C(n+1,2n)C(n,2n) - C(n+1,2n)C(n,2n)−C(n+1,2n)种.
也就是(2n)!(n+1)!(n)!\frac{(2n)!}{(n+1)!(n)!}(n+1)!(n)!(2n)!, 也就是C(n,2n)/(n+1)C(n,2n)/(n+1)C(n,2n)/(n+1)
打印所有排列
解法一:递归。容易理解
#include<iostream>
#include<vector>
#include<string>using namespace std;void generate_res(vector<string> &res, string tmp, int left, int right);int main() {int n = 3; //有n对括号string tmp = "";vector<string> res;generate_res(res, tmp, n, n);for (auto i : res)cout << i << endl;return 0;
}void generate_res(vector<string> &res, string tmp, int left, int right) {if (left < 0 || right < left) return;if (left == 0 && right == 0) {res.push_back(tmp);return;} else {if (left > 0) {tmp += '(';generate_res(res, tmp, left - 1, right);tmp.pop_back();}if (right > left) {tmp += ')';generate_res(res, tmp, left, right - 1);}}
}
解法二:DFS,完全按推导来(不好理解。。):
vector<string>generate(int n){vector<string> result;if (n == 0) {result.push_back("");return result;}if (n == 1) {result.push_back("()");return result;}for (int i = 1; i <= n; i++) {vector<string> left = generate(i - 1);vector<string> right = generate(n - i);for (int j = 0; j < left.size(); j++) {for (int k = 0; k < right.size(); k++) {result.push_back("("+left[j]+")" + right[k]);}}}return result;
}
程序员面试金典——9.6合法序号序列判断相关推荐
- C#LeetCode刷题-程序员面试金典
本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-程序员面试金典 | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode程序员面试金典 ...
- 程序员面试金典——9.9n皇后问题
程序员面试金典--9.9n皇后问题 Solution1:我的答案,利用回溯法可做 我的答案就挺好,哈哈哈哈 class Queens { public:int nQueens(int n) {// w ...
- 集合栈 牛客网 程序员面试金典 C++ Python
集合栈 牛客网 程序员面试金典 C++ Python 题目描述 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈.该数据结构应支持与普通 ...
- 加法运算替代 牛客网 程序员面试金典 C++ Python
加法运算替代 牛客网 程序员面试金典 题目描述 请编写一个方法,实现整数的乘法.减法和除法运算(这里的除指整除).只允许使用加号. 给定两个正整数int a,int b,同时给定一个int type代 ...
- 程序员面试金典--第k个数
程序员面试金典--第k个数 题目描述 有一些数的素因子只有3.5.7,请设计一个算法,找出其中的第k个数. 给定一个数int k,请返回第k个数.保证k小于等于100. 测试样例: 3 返回:7 逐个 ...
- 程序员面试金典 - 面试题 08.13. 堆箱子(DP)
1. 题目 堆箱子.给你一堆n个箱子,箱子宽 wi.深 di.高 hi. 箱子不能翻转,将箱子堆起来时,下面箱子的宽度.高度和深度必须大于上面的箱子. 实现一种方法,搭出最高的一堆箱子.箱堆的高度为每 ...
- 程序员面试金典 - 面试题 17.08. 马戏团人塔(最长上升子序 DP/二分查找)
文章目录 1. 题目 2. 解题 2.1 超时解 2.2 二分查找 1. 题目 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一 ...
- 《程序员面试金典》解题目录(更新完毕)
题目来源于LeetCode上的<程序员面试金典>,这里做一个目录方便大家查找.另外有本人的LeetCode解题目录.<剑指Offer>解题目录.LintCode代码能力测试CA ...
- 《程序员面试金典》+《算法导论》
<程序员面试金典>+<算法导论> 因为最近可能会面临一波面试,但是自己各种算法以及常见的问题的熟悉程度感觉还不够,但是由前几次的代码优化经验来看,算法优化可以说是代码优化的重中 ...
最新文章
- 将jpg图像转换成yuv420p格式
- new Map的妙用
- Boost:嵌入PTX汇编指令 直接将其添加到boost.compute函数中
- 前端学习(914):offerset和style区别
- 批量 材质 调整_寒霜引擎的PBR实践3.0(一)材质篇
- php获取用户当前坐标,web端定位:获取当前地理位置
- InvalidateRect的困惑
- 【优化算法】阿基米德优化算法(AOA)【含Matlab源码 1447期】
- POJ 2989 All Friends
- 基于ZFS+SAS的Tier2/backup存储系统解决方案
- 服务器虚拟机如何复制文件,Windows中复制虚拟机
- 【超级经典】程序员装B指南
- DSPE;CAS:1069-79-0 ;二硬脂酰基磷脂酰乙醇胺;功能化磷脂
- Ubuntu找不到wifi适配器问题及解决办法
- 测试工程师等级评定细则
- 百度云加速zblog和WordPress规则自定义
- [数据挖掘理论与案例] 大数据的4个V
- 通过慕课网学习Python
- BP或FI12维护银行账户,报错“银行帐户编号XXX必须具有长度 18”
- 交易系统模块划分,模块拆分,设计,重构实战.状态
热门文章
- 【计算机视觉-从入门到精通系列】 第三章 立体匹配
- Eclipse编译时函数报错:Undefined reference to 'pthread_create'
- linux安装或卸载mysql5,Linux环境下卸载、安装及配置MySQL5.1
- python解码和编码的区别_python基础小知识,is和==的区别,编码和解码
- nginx linux 部署web项目名,Linux部署web项目配置Nginx
- 解压出来的文件md5会改变吗_监控Linux文件变化,防止系统被黑
- android 链式结构,Android 架构师之路10 设计模式之责任链模式
- python静态递归函数_Python递归函数
- c语言中联机停止运行,Win7开机提示Microsoft(C)注册服务器已停止工作怎么办?
- java 防止sql注入_Java中SQL注入以及如何轻松防止它