for example, given n = 3, a solution set is:
[「((()))」,
「(()())」,
「(())()」,
「()(())」,
「()()()」
]這道題是借鑑網上的思路解出的,主要摘自
所謂backtracking都是這樣的思路:在當前局面下,你有若干種選擇。那麼嘗試每一種選擇。如果已經發現某種選擇肯定不行(因為違反了某些限定條件),就返回;如果某種選擇試到最後發現是正確解,就將其加入解集
所以你思考遞迴題時,只要明確三點就行:選擇 (options),限制 (restraints),結束條件 (termination)。即「ort原則」(這個是我自己編的)
對於這道題,在任何時刻,你都有兩種選擇:
加左括號。
加右括號。
同時有以下限制:
如果左括號已經用完了,則不能再加左括號了。
如果已經出現的右括號和左括號一樣多,則不能再加右括號了。因為那樣的話新加入的右括號一定無法匹配。
結束條件是:
左右括號都已經用完。
結束後的正確性:
左右括號用完以後,一定是正確解。因為1. 左右括號一樣多,2. 每個右括號都一定有與之配對的左括號。因此一旦結束就可以加入解集(有時也可能出現結束以後不一定是正確解的情況,這時要多一步判斷)。
遞迴函式傳入引數:
限制和結束條件中有「用完」和「一樣多」字樣,因此你需要知道左右括號的數目。
當然你還需要知道當前局面sublist和解集res。
class
solution
public
void
backtrack
(list
res,string substring,
int left,
int right)
if(left>0)
if(left}}
IOS學習筆記38
解析 很多剛開始學習ios開發的同學可能在看別人的 的時候會發現有部分 import操作寫在 m 檔案中,而 h 檔案僅僅使用 class進行宣告,不禁納悶起來,為什麼不直接把 import放到 件中呢?這是因為 h 檔案在修改後,所有 import 該 h 檔案的所有檔案必須重 新build,因此...
JUNIT3 8學習筆記(2)
2008年8月14號 天氣陰 周五 junit3.8學習筆記 2 執行testcase類的測試類,在執行每乙個測試類方法之前都會執行setup方法,因此可以將一些重複出現的程式碼寫到setup方法中,也可以將測試資料庫的程式碼連線程式碼寫到setup方法中。同樣,有初始化方法,就有銷毀方法teard...
Flash Flex學習筆記 38 緩動動畫
緩動 與 勻變速 看上去很類似,但其實有區別 勻變速的公式為 v v0 at 速度v與時間t是線性 正比 關係,而且這種運動不需要確定目標點,速度可以按照這種規律一直變下去 而緩動指的是物體越接近目標時速度越慢,速度跟距離成反比關係,用公式描述為 v k s 0先看個演示 package priva...