LC 22: generación de soporte

Generación de paréntesis

Descripción del problema: el
  número n representa el logaritmo de los corchetes generados. Diseñe una función que pueda generar todas las combinaciones posibles y efectivas de corchetes.

Ejemplos:

Entrada: n = 3
Salida: [
"((()))",
"(() ())",
"(()) ()",
"() (())",
"() () ( ) "
]

Ideas para resolver problemas:

  Para esta pregunta, se puede usar dfs. Hay algunos paréntesis izquierdos más que se pueden usar para registrar el paréntesis izquierdo, y algunos paréntesis derecho se pueden usar para registrar el paréntesis derecho. Cuando se deja == 0 && right == 0, agréguelo al vector.
  Para evitar la situación de "())" al principio, también utilicé la bandera para registrar el número de corchetes izquierdos ("" que no se han emparejado, por supuesto, también se puede reemplazar por el corchete derecho, si la bandera <0, el corchete izquierdo " ("El corchete derecho") "ya no se puede usar después de completar el emparejamiento.

El código es el siguiente:

#include<iostream>
#include<vector> 
using namespace std;
void dfs(vector<string> &v,string s,int l,int r,int flag){
        if(l==0&&r==0){
            s=s+")";//最后加上“)”
            v.push_back(s);//加入vector容器
            return ;
        }
        if(l>=1){
        	dfs(v,s+"(",l-1,r,flag+1);//多了一个左括号,所以flag+1
		}
        if(r>=1&&flag>0){
        	dfs(v,s+")",l,r-1,flag-1);//配对了一个左括号,所以flag-1
		}
        return ;
    }
    vector<string> generateParenthesis(int n) {
        vector<string> v;
        string s="(";//当n>0则最左边和最右边肯定是“(” 和“)”
        if(n==0){
            return v;
        }
        int l=n-1;//剩余的左括号个数是n-1
        int r=n-1;//剩余的右括号个数是n-1
        dfs(v,s,l,r,1);//flag一开始为1,因为存在了一个“(”未配对
        return v;
    }
int main(){
	vector<string>v;
	v=generateParenthesis(3);
	for(int i=0;i<v.size();i++){
		cout<<v[i]<<endl;
	}
	return 0;
} 
14 artículos originales publicados · Me gusta 10 · Visitantes más de 10,000

Supongo que te gusta

Origin blog.csdn.net/Milan_1in/article/details/105431363
Recomendado
Clasificación