解法一:左右括号成一对则抵消
可以将左括号看成1右括号看成 -1,然后对8个数进行全排列
对每个排列判断,是否符合条件,逐个相加,sum>=0直到遍历完该序列,
符合条件则count++
如果出现sum<0则失败
解法二:采用八位bit,从0000 0000 到 1111 1111遍历,遇到0加 -1遇到1加 1
如果加完该序列所有位等于0,且递加过程中sum始终大于零则符合条件
#include<iostream>
#include <vector>
using namespace std ;
void Print(vector<char> v)
{
for (vector<char>::iterator beg=v.begin();beg!=v.end();++beg)
cout<<*beg<<" ";
cout<<endl;
}
void MatchNums(int nSize,int nLen,vector<char> &v)
{
int nLeftBrackets=0;
int nRightBrackets=0;
for (vector<char>::iterator beg=v.begin();beg!=v.end();++beg)
{
if(*beg=='(')
nLeftBrackets++;
else
nRightBrackets++;
if(nRightBrackets>nLeftBrackets)
return;
if(nLeftBrackets+nRightBrackets==nSize&&nLeftBrackets==nRightBrackets)
Print(v);
}
if (nLen>0)
{
v.push_back('(');
MatchNums(nSize,nLen-1,v);
v.pop_back();
v.push_back(')');
MatchNums(nSize,nLen-1,v);
v.pop_back();
}
}
int main()
{
vector <char> v;
int n=4;
MatchNums(n,n,v);
return 1;
}
可能单独看代码会感觉很难理解,毕竟里面使用了递归,不要紧,其实代码的含义十分的简单,要快速理解它我们需要明确以下几点原则:
1、我们将一对括号分为单独的两部分:左括号和右括号。然后从0个开始一个一个添加左括号或右括号。
2、为使括号组合都是合理的,第一个添加的必须是左括号,最后一个添加的必须是右括号。
#include <iostream> #include <string> using namespace std; void bracketMatch(string bracketString,int left,int right){ if(right==0){ cout<<bracketString<<endl; return; } else /*可通过在左括号添加语句前对连续出现左括号的个数的判断来决定下面的左括号添加操作是否执行以控制括号嵌套的深度*/ if(left==right){ //此时只能添加左括号 bracketString+="<"; bracketMatch(bracketString,--left,right); } else if(left<right&&left>0){ //此时可以有添加左括号或右括号两种情况 string temp=bracketString; bracketString+="<"; bracketMatch(bracketString,--left,right); left++; temp+=">"; bracketMatch(temp,left,--right); } else if(left==0){ //只能添加右括号了 bracketString+=">"; bracketMatch(bracketString,left,--right); } } int main(){ string s; int num; cout<<"请输入括号的对数:"<<endl; while(cin>>num){ s=""; cout<<"所有合理的括号匹配形式为:"<<endl; bracketMatch(s,num,num); } return 0; }
#include <iostream> #include <math.h> using namespace std; void MatchNums(int a[],int n){ int num=pow((double)2,n); for(int i=0;i<num;++i){ int sum=0; bool signal=true; int j=i; int count=n-1; while(count>=0){ if((j%2)==1){ a[count]=1; j=j>>1; } else{ a[count]=-1; j=j>>1; } --count; } for(int k=0;k<n;k++){ sum+=a[k]; if(sum<0){ signal=false; break; } } if((sum!=0)&&signal) signal=false; if(signal){ for(int k=0;k<n;k++){ if(a[k]==1) cout<<"("; else cout<<")"; } cout<<endl; } } } int main(){ int a[8]; int n=8; MatchNums(a,n); system("pause"); return 1; }
发表评论
-
析构函数为虚函数的原因
2012-09-09 11:42 830我们知道,用C++开发的时候,用来做基类的类的析构函数 ... -
hash的应用
2012-08-31 23:02 959第一部分为一道百度面试题Top K算法的详解;第二部分为关 ... -
微软智力题
2012-08-29 19:59 565第一组1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有 ... -
C++不能被继承的类
2012-08-27 20:16 1055一个类不能被继承, ... -
树的遍历
2012-08-19 10:43 717/****************************** ... -
堆排序
2012-08-16 14:24 882堆:(二叉)堆数据结构是一种数组对象。它可以被视为一棵完全 ... -
多态赋值
2012-08-14 16:16 828#include <iostream> usi ... -
static变量与static函数(转)
2012-08-13 10:15 744一、 static 变量 static变量大致分为三种用法 ... -
不用sizeof判断16位32位
2012-08-10 15:21 1701用C++写个程序,如何判断一个操作系统是16位还是3 ... -
找出连续最长的数字串(百度面试)
2012-08-09 15:15 1144int maxContinuNum(const char*in ... -
顺序栈和链栈
2012-08-06 10:01 796顺序栈:话不多说直接上代码 #include ... -
队列的数组实现和链表实现
2012-08-05 16:20 1023话不多少,数组实现上代码: #include<i ... -
KMP算法详解
2012-08-02 21:40 880KMP算法: 是在一个“主文本字符串” ... -
字符串的最长连续重复子串
2012-08-01 15:05 9768两种方法: 循环两次寻找最长的子串: <方法一> ... -
寻找一个字符串连续出现最多的子串的方法(转)
2012-07-31 21:19 974算法描述首先获得后缀数组,然后1.第一行第一个字符a,与第二行 ... -
字符串的循环移位
2012-07-31 16:52 974假设字符串:abcdefg 左循环两位:cdefgab 右 ... -
一次谷歌面试趣事(转)
2012-07-31 15:26 764很多年前我进入硅谷 ... -
约瑟夫环问题(循环链表)
2012-07-30 21:31 1287题目描述:n只猴子要选大王,选举方法如下:所有猴子按 1, ... -
面试之单链表
2012-07-30 20:18 7261、编程实现一个单链表的建立/测长/打印。 ... -
多重继承内存地址问题
2012-07-30 15:55 726[cpp] view plaincopy ...
相关推荐
为了帮助程序员更好地组织代码,有一种名为"括号虚线对齐"的功能,它可以使得代码中的括号对齐,提高代码的视觉效果。 标题中的"vs2010括号虚线对齐"指的是在VS2010中,通过某种方式或插件实现了括号之间的虚线对齐...
Eclipse是一款广泛使用的Java开发集成环境,而"eclipse括号对齐插件(2016-03版)"是专门为Eclipse设计的一款增强工具,旨在提高代码可读性和美观性。这款插件借鉴了Visual Studio(VS)中的功能,为用户提供了类似的...
Visual Studio 2010作为一款强大的集成开发环境(IDE),提供了丰富的插件来增强其功能,IndentGuide就是其中的一个例子,旨在帮助程序员更好地对齐代码中的括号,从而提高代码的可读性。 IndentGuide是一款针对...
2. **括号对齐**:确保代码中的括号(如if、for、while等)与相应的语句对齐,提高代码结构的清晰度。 3. **关键字对齐**:将相似的关键字(如var、const、function等)对齐,使代码看起来更加整齐。 4. **注释...
4. 按括号对齐:括号内的内容可以进行对齐,提升代码的层次感。 此外,XAlign还支持自定义对齐规则,这意味着开发者可以根据自己的编程风格和团队规范进行个性化设置。通过这些功能,Xcode的开发体验将更加接近...
1. **括号对齐**:自动对齐函数调用、条件语句、循环语句等中的括号,使代码的结构清晰可见。 2. **等号对齐**:在赋值语句中,将等号对齐,便于一眼看出变量的赋值关系。 3. **缩进调整**:根据用户设定的缩进规则...
eclispe辅助对齐虚线插件,内附安装教程离线安装超详细
在Eclipse这款强大的Java开发集成环境中,为了提升代码的可读性和美观性,开发者往往希望在编辑器中实现代码的对齐功能。"eclipse中增加对齐虚线"这一主题,就是关于如何在Eclipse中引入代码对齐辅助线,也称为...
标题中的“VS2012行虚线对齐工具”指的是Visual Studio 2012中的一款插件,用于帮助程序员在编写代码时保持代码的对齐和整洁。这款插件通常被称为Indent Guide,它通过在代码编辑器中显示虚线来指示每一级缩进,使得...
此插件可以自动检测并调整代码中的括号、引号、变量声明等元素的位置,使得代码看起来更加规整,减少人为排版错误。 除了这两个插件,VS2015生态系统中还有许多其他值得一提的插件: 1. **Resharper**:这是一个...
Eclipse虚线对齐插件则弥补了这一空白,它能够自动显示虚线指示符,显示代码元素之间的相对位置,使得观察和修正对齐问题变得直观而快速。 插件的安装过程相对简单,首先需要在Eclipse的“帮助”菜单中选择...
只需轻轻一点,就能将原本错乱的括号对齐得整整齐齐,让代码看起来如同艺术品般规整。 插件的使用方法十分简单。首先,你需要在VS Code的扩展市场搜索"VS代码对齐插件",找到相应的插件并安装。安装完成后,重启VS ...
使用VBA自动对齐工具,开发人员可以提高工作效率,减少因格式问题引发的错误,同时也让代码审查变得更加轻松。配合压缩包中的"VBA-自动缩进工具",用户只需按照说明运行程序,即可实现快速的代码格式化,提升编程...
1. **代码对齐**:AStyle可以自动调整代码中的括号、运算符、注释等元素的对齐方式,使其符合特定的代码规范。 2. **缩进处理**:它可以将代码中的缩进设置为使用空格或者制表符,并且可以调整缩进的宽度,以适应...
内存对齐问题的完美解释 在本文中,我们将深入探讨 C 语言中的 sizeof 操作符,解释其概念、使用方法、结果类型、与其他操作符的关系及其主要用途,并以实际示例来展示 sizeof 的应用。 一、sizeof 概念 sizeof ...
2. **括号匹配**:自动对齐函数、循环、条件语句等的括号,使得代码块更加容易识别。这对处理复杂的嵌套结构尤其有帮助。 3. **行尾对齐**:将相同类型的语句(如赋值、声明或调用)的末尾对齐,使得代码看起来整齐...
默认情况下,当我们在大括号内部敲击回车键时,编辑器应该会自动创建一个新的缩进行,以便于保持代码的整洁和对齐。然而,当这个功能失效时,通常是因为用户的设置出现了异常。 解决问题的第一步是打开 VSCode 的...
2. **括号对齐**:确保括号成对出现且位置正确,这对于多层嵌套的查询尤其有用。 3. **逗号间距**:保持逗号与其他元素之间的间距一致,增加代码的整洁度。 4. **注释整理**:将注释与代码分离,使其清晰易读。 5. *...
这个插件,通常被称为Indent Guide或Vertical Ruler,能够帮助开发者更好地对齐代码中的各种元素,如括号、语句和注释,使得代码结构更加清晰,便于阅读和维护。 Indent Guide插件的功能主要体现在以下几个方面: ...
这种对齐方式通常被称为“虚线引导”,它会在代码中显示虚线,以便于程序员快速定位和调整对齐的元素,如变量、括号或等号。 虚线对齐插件——atlanto-IndentGuide-c4c145c,是Eclipse插件的一种,它的主要功能是在...