招银2018[编程题]寻找合法字符串

Posted wqpkita

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了招银2018[编程题]寻找合法字符串相关的知识,希望对你有一定的参考价值。

给出一个正整数n,请给出所有的包含n个‘(‘和n个‘)‘的字符串,使得‘(‘和‘)‘可以完全匹配。

例如:

‘(())()‘,‘()()()‘ 都是合法的;

‘())()(‘是不合法的。
#include <stdio.h>
#include <iostream>
using namespace std;

#define MAX   50  
bool start = true;

//pos:       此时的位置下标
//NumPre:    剩余的左括号数目
//NumPost:  剩余的右括号数目
void helpCore(char *array, int pos, int NumPre, int NumPost) {

    if (NumPre > NumPost){ //剩余的左括号多余右括号,不满足
        return;
    }

    if (NumPre == 0){   //左括号用完,则放右括号至右括号完
        while (NumPost){
            array[pos++] = );
            NumPost--;
        }
        array[pos] = ;

        if (start) {
            printf("%s", array);
            start = false;
        }
        else
            printf(",%s", array);
    }
    else {
        if (NumPre == NumPost){ 
            array[pos] = (;
            helpCore(array, pos + 1, NumPre - 1, NumPost);
        }
        else{ // NumPre <= NumPost
            array[pos] = (;
            helpCore(array, pos + 1, NumPre - 1, NumPost);
            array[pos] = );
            helpCore(array, pos + 1, NumPre, NumPost - 1);
        }
    }

    return;

}

int main()
{
    char array[MAX] = {0};
    //memset(array, ‘0‘, sizeof(array));
    int n;
    cin >> n;
    helpCore(array, 0, n, n);

    return 0;
}

 

以上是关于招银2018[编程题]寻找合法字符串的主要内容,如果未能解决你的问题,请参考以下文章

招银三面手撕代码题(字符串连续子串)

股市买卖问题(招银网络科技笔试编程题)

招银网络面试题考点知识点总结(Java岗)

[编程题] lc [287寻找数组中重复数

招银网络

[编程题] 等差数列 网易2018