1. 程式人生 > >Leetcode之backtracking

Leetcode之backtracking

。。 ack color 遇到 target 一個空格 sel 明顯 ima

其實backtracking對我來說一直是一個難點。我分析不好,而且腦子會很亂。。

今天遇到了一道題:

Generate Parentheses(LC22 medium)

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

For example, given n = 3, a solution set is:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

這道題明顯是要用backtracking做最容易。先上代碼:
class Solution(object):
    def generateParenthesis(self, n):
        """
        :type n: int
        :rtype: List[str]
        """
        def generate(current,left,right,result=[]):
            if left>0:
                generate(current+"(",left-1,right)
            if left<right: 
                generate(current
+")",left,right-1) if not right: result +=current , return result return generate("",n,n)

這道題有兩個點:1. python中逗號在字符串連接中的使用:

如果兩個字符串用“逗號”隔開,那麽這兩個字符串將被連接,但是,字符串之間會多出一個空格:

‘Jim‘, ‘Green‘ = ‘Jim Green‘

2. backtracking!

對於這道題的backtracking,我用畫堆棧的方法分析了一下,看起來很亂,但放上來可以提醒自己下次也用這種方法分析:

技術分享圖片

關於回溯法:http://blog.csdn.net/tongxinzhazha/article/details/77628450 寫的很詳細,包括模板示例

分析只是表層的級別,還是要多練才能熟練的寫出來。



Leetcode之backtracking