• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

小米面试题:N对括号所有的合法状态解法代码

其他 水墨上仙 1907次浏览

小米面试题:N对括号所有的合法状态解法代码给定N对括号,输出其所有的合法的组合状态,例如,N=3,所有的合法状态为:”((()))”, “(()())”, “(())()”, “()(())”, “()()()”思路:还是深搜DFS的思路,深搜的过程关键在于记录已经用掉的左括号个数和右括号的个数,当用过的左括号个数大于右括号则非法;当二者个数和大于2N则非法;当二者个数相等且数目等于2N则为合法。

#include
using namespace std;
 
#define PAIR 50
 
char str[PAIR * 2 + 1]; // 设括号对数不超过50, str记录括号组合状态
 
void DFS_bracket(int n, int left_used, int right_used)
{
    if(left_used == right_used && left_used + right_used == 2*n)
    {
        printf("%s\n",str);
        return;
    }
    if(left_used < right_used || left_used + right_used >= 2*n)
    {
        return ;
    }
    int index = left_used + right_used;
    str[index] = '(';
    DFS_bracket(n, left_used + 1, right_used);
 
    str[index] = ')';
    DFS_bracket(n, left_used, right_used + 1);
}
 
void main()
{
    int N;
    scanf("%d", &N);
    DFS_bracket(N,0,0);
}


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明小米面试题:N对括号所有的合法状态解法代码
喜欢 (0)
加载中……