其实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 写的很详细,包括模板示例
分析只是表层的级别,还是要多练才能熟练的写出来。
时间: 2024-10-11 20:59:10