1. 程式人生 > >回溯演算法----括號的生成

回溯演算法----括號的生成

#include<iostream>
#include<string>
#include<vector>
using namespace std;
void rade(string temp, vector<string> &a,int left, int right)
{
if ((left == 0) && (right == 0)) 
{
a.push_back(temp);
return;
}
if (left>0) 
{
rade(temp + "(", a, left - 1, right);
}  
if (left<right) 

rade(temp + ")", a, left, right - 1);
}
}
int main()
{
int n;
while (cin >> n)
{
vector<string> a;
rade("", a, n, n);
for (int i = 0; i < a.size(); i++)
{
cout << a[i] << endl;
}
}
}

相關推薦

回溯演算法----括號生成

#include<iostream>#include<string>#include<vector>using namespace std;void rade(string temp, vector<string> &a

【探索-中級演算法生成括號

得到全排列的組合,同時對於不符合要求的組合要剔除。 public List<String> generateParenthesis(int n) { List<String> result = new ArrayList<>();

資料結構演算法題/括號生成

這道題給定一個數字n,讓生成共有n個括號的所有正確的形式,對於這種列出所有結果的題首先還是考慮用遞迴Recursion解。 由於字串只有左括號和右括號兩種字元,而且最終結果必定是左括號3個,右括號3個,所以我們定義兩個變數left和right分別表示剩餘左右括號的個數。 如果在某次遞迴時,剩

Leetcode---括號生成--回溯

括號生成 題目連結:括號生成 思路: 回溯法的結果集一般是搜尋過程中動態生成的 利用條件限制不合法的子集生成,避免龐大的無效遞迴 當結果不滿足條件時返回到上一層,應當恢復為之前的狀態 這裡兩個儲存空間,所以互不影響 public List<

leetcode:括號生成(java)回溯實現

 應用於回溯思想:無非就是六個括號進行排列組合:也就是2^6;不是左括號就是右括號,然後進行一個一個的走不行則進行返回上一層。但是要控制住其中的左括號和右括號對應正常思想是先進行左括號所以左括號一定要比右括號多根據這個思想我進行寫程式碼經過不斷更改過測試; package

Leetcode 22. 括號生成 dfs+回溯

給出 n 代表生成括號的對數,請你寫出一個函式,使其能夠生成所有可能的並且有效的括號組合。 例如,給出 n =3,生成結果為: [ "((()))", "(()())", "(())()", "()(())", "()()()" ] 此題要注意新增)

[leetcode] 22. 括號生成

gen 升級 com lis ++ leetcode ML esc 有效 22. 括號生成 謹慎後,1A的概率貌似高了些 算是20題的升級版吧, 利用遞歸來拼成string,然後通過20. 有效的括號該題的代碼來判斷生成的string合不合法 看代碼吧 class Solu

c++刷題(21/100)樹的打印、矩陣覆蓋和括號生成

生成 一個 ring 第一個 pop 全局 over 矩形 node 題目一:把二叉樹打印成多行 從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 思路:一開始以為2維的vector可以直接訪問,但是試了是不行,會報錯,vector在有值之前不能直接訪問,所

Leetcode 22. 括號生成

str ret == leetcode div ack push rate pre class Solution { public: void generate(string item, int left, int right, vector<string&

[Swift]LeetCode22. 括號生成 | Generate Parentheses

生成 ack nbsp tree dpa self. 一點 ons 添加 Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes

Java回溯演算法解數獨問題

    下面來詳細講一下如何用回溯演算法來解數獨問題。     下圖是一個數獨題,也是號稱世界上最難的數獨。當然了,對於計算機程式來說,只要演算法是對的,難不難就不知道了,反正計算機又不累。回溯演算法基本上就是窮舉,解這種數獨類的問題邏輯比較簡

雪花演算法解析 生成uuid

package com.grid.service; public class SnowflakeIdWorker { /** * 雪花演算法解析 結構 snowflake的結構如下(每部分用-分開): * 0 - 0000000000 0000000000 000000

遞迴、回溯-演算法框架

之前已經學習過回溯法的一些問題,從這篇文章開始,繼續深入學習一下回溯法以及其他經典問題。 回溯法有通用的解題法之稱。用它可以系統的搜尋一個問題的所有解或任一解,回溯法是一個既帶有系統性又帶有跳躍性的搜尋演算法。 它的問題的解空間樹中,按深度優先策略,從根結點出發搜尋解空間樹。演算法搜尋至

LeetCode.22括號生成

題目來源:https://leetcode-cn.com/problems/generate-parentheses/description/ 題目描述:  演算法描述: 1.這個題目可以看成是一個回溯演算法。 2.只要有左括號就先將左括號新增到str字串中進行遞迴,

leetcode題庫——括號生成

題目描述: 給出 n 代表生成括號的對數,請你寫出一個函式,使其能夠生成所有可能的並且有效的括號組合。 例如,給出 n = 3,生成結果為: [ "((()))", "(()())", "(())()", "()(())", "()(

回溯法和生成測試法比較

回溯法就是是把問題劃分為若干個步驟然後遞迴求解,如果本層沒有合適的解,將返回上一層,這個過程中剪了很多不必要的資料,所以效率較高。 生成測試時將所有的都窮舉出來,然後測試。 問題:素數環 https://vjudge.net/problem/UVA-524 回溯法:對應n=16

[leetcode22] 括號生成

給出 n 代表生成括號的對數,請你寫出一個函式,使其能夠生成所有可能的並且有效的括號組合。 這道題最初打算用最死板的方法去做,但是寫的過程中發現複雜度太高而且很繁瑣。然後參考了一下別人遞迴的思路很快就寫出來了。 python: class Solution:

0-1揹包問題—回溯演算法—java實現

0-1揹包問題 【問題描述】 有n種可選物品1,…,n ,放入容量為c的揹包內,使裝入的物品具有最大效益。 表示 n :物品個數 c :揹包容量 p1,p2, …, pn:個體物品效益值 w1,w2, …,wn:個體物品容量 【問題解析】 0-1揹包問題的解指:物品1,…,n的一種放

0-1揹包問題-回溯演算法

    回溯演算法類似於遍歷的求解,但不同於無腦遍歷的的地方是它在每一步都判斷是否滿足約束條件,及回溯點,所以可以理解為有條件的遍歷。使用回溯演算法求解01揹包最優解時需要建立二叉樹,樹有業務意義的深度為物品數量n,加上根節點總深度為n+1,除了終端節點外,每個葉子

Leetcode ---- 22. 括號生成

題目: 給出 n 代表生成括號的對數,請你寫出一個函式,使其能夠生成所有可能的並且有效的括號組合。 例如,給出 n = 3,生成結果為: [ "((()))", "(()())", "(())()", "()(())", "()()()"