Leetcode之backtracking

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode之backtracking相关的知识,希望对你有一定的参考价值。

其实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的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode编程训练 - 回溯(Backtracking)

LeetCode-Backtracking

[Leetcode] Backtracking回溯法解题思路

[leetcode]Backtracking-39. Combination Sum

LeetCode回溯法 backtracking(共39题)

[LeetCode] 90.Subsets II tag: backtracking