代码编织梦想

Given n pairs of parentheses,write a function to generate
are all combinations of well-formed parentheses.

Example 1:
Input:n=3
Output:
["((()))","(()())","(())()","()(())","()()()"]

解题思路:
这道题利用深度优先搜索即可,不需要判断括号是否匹配.只需要保证左括号的个数不能小于
右括号的.

Go语言实现

package main

import "fmt"

func GenrateParenthese(n int)[]string{
	if n==0{
		return []string{}
	}
	ans:=[]string{}
	findgenerateparenthese(n,n,"",&ans)
	return ans
}

func findgenerateparenthese(lp,rp int,str string,ans *[]string){
	/*剪枝*/
	if lp>rp{
		return
	}
	if lp==0&&rp==0{
		*ans=append(*ans,str)
	}
	if lp>0{
		findgenerateparenthese(lp-1,rp,str+"(",ans)
	}
	if rp>0{
		findgenerateparenthese(lp,rp-1,str+")",ans)
	}
}
func main(){
	fmt.Println("生成括号的组合")
	fmt.Println(GenrateParenthese(3))
}

C++语言实现

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

class Solution{
public:
    vector<string> generateparenthese(const int& n){
        if(n==0)
           return {};
        vector<string> ans;
        /*pair<括号字符串, pair<左括号剩余,右括号剩余>*/
        queue<pair<string,pair<int,int>>> board;
        board.push({"",{n,n}});
        while(!board.empty()){
            auto top=board.front();
            board.pop();
            string str=top.first;
            int left=top.second.first,right=top.second.second;
            if(left==0&&right==0){
                ans.push_back(str);
            }
            if(left>0)
               board.push({str+"(",{left-1,right}});
            if(right>0&&right>left)
               board.push({str+")",{left,right-1}});
        }
        return ans;
    }
};

int main(int argc,char* argv[]){
    auto n=3;
    vector<string> ans=Solution().generateparenthese(n);
    for(auto& res:ans)
       cout<<res<<" ";
    cout<<endl;
    return 0;
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/Jiangtagong/article/details/111036109

整数反转与字符串转数组-爱代码爱编程

//给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 // // 示例 1: // // 输入: 123 //输出: 321 // // // 示例 2: // // 输入: -123 //输出: -321 // // // 示例 3: // // 输入: 120 //输出: 21 // // // 注意: // /

C语言字符串转换为整数-爱代码爱编程

为下面这个函数原型编写函数定义: int ascii_to_integer(char *string); 这个字符串参数必须包含一个或多个数字,函数应该把这些数字字符转换为整数并返回这个整数,如果字符串参数包含了任何非数字字符,函数就返回零。 请不必担心算数溢出。 提示:这个技巧很简单,你每发现一个数字,把当前值乘以10,并把这个值和新数字所代表的

leetcode540 有序数组中的单一元素-爱代码爱编程

题目描述 题目链接 代码 public int singleNonDuplicate(int[] nums) { int left = 0; int right = nums.length - 1; while (left <= right) { int mid =

【C语言】——残缺棋盘问题-爱代码爱编程

1.题目描述:残缺棋盘问题 2.解题分析: 利用分治算法将棋盘细化,逐步解决。首先判断残缺的位置在哪里,然后在中间填上对应的三格板,然后通过中间将其分成了小残缺棋盘,从而问题得以解决     3.代码实现: #include <stdio.h> #include <math.h> void TileBoard(int tr,

快速排序-爱代码爱编程

#include <iostream> using namespace std; int Partition(int a[], int left, int right) { int i = left, j = right + 1; int k = a[left]; while(1) { while(a[++i] < k

二维数组的螺旋遍历-爱代码爱编程

原理及遍历结果如图所示:示例代码private static List<Integer> spiralArray(int[][] array) { // 数组为空,返回null if (array.length == 0 || array[0].length == 0) { return

终于找到了最详细系列之HTML字符实体-爱代码爱编程

HTML 字符实体 HTML 中的预留字符必须被替换为字符实体。一些在键盘上找不到的字符也可以使用字符实体来替换。 浏览器还会把以下字符当作空白进行解析:空格(&#x0020;)、制表位(&#x0009;)、换行(&#x000A;)和回车(&#x000D;)还有(&#12288;)等等。所以如果想显示空白需要使用

理解 equals ==-爱代码爱编程

JAVA里面的数据类型可以分为2类: 1、基本数据类型:byte、short、int、long、float、double、boolean、char 8种。他们之间的比较【之间:我的理解是这8种类型仅限这8种相互交叉比较,比如byte==byte   也可以 byte==short 也可以 byte==int】,就使用双等号(==),比较的是他们的值。

和你一起刷算法-LeetCode刷题之双指针训练营(七)-爱代码爱编程

第一题快速导航:633. 平方数之和 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。 示例 1: 输入:c = 5 输出:true 解释:1 * 1 + 2 * 2 = 5 示例 2: 输入:c = 3 输出:false 示例 3: 输入:c = 4 输出

java程序实现字符串的替换、特定字符串与数值之间的相互转换-爱代码爱编程

java程序实现字符串的替换、特定字符串与数值之间的相互转换 字符串的替换 replace()方法可以把指定的字符或字符串替换成为新的字符或字符串。 str.replace(被替换字符,替换之后的字符); 若是需要替换的新的字符串没有在该对象中的字符串中出现,那么程序的返回值将会是原字符串。 数值与字符串的转换 字符串数字转数字使用语句Intege

还在用StringBuilder进行字符串拼接?那你就OUT了-爱代码爱编程

我们在开发中会经常拼接字符串,例如我们现在有一个数组: private static final String[] names = {"我", "大意了啊", "年轻人", "不讲武德", "来骗"}; 我们需要将元素提取出来,然后拼接成一个整字符串,目标效果如下: 我, 大意了啊, 年轻人, 不讲武德, 来骗 "+"拼接 那么,你准备怎么做

linux 下C语言:在命令行传参数-爱代码爱编程

linux 下C语言:在命令行传参数 最近因为要实现代码灵活处理数据,想每次运行处理不同的数据,即每次运行之前都要传不同的参数进去。这我就纳闷了:程序写在.c文件里面,退出来在命令行输入命令运行,怎么能实现传递参数呢? 问了师兄,才知道,在Linux下命令行是可以直接传递参数的。传递参数得有个接口吧,接口在哪呢?就在main()函数! 其实呢,mai