leetcode 22
卡在22题了,哭了,卡了一天了,有思路写不出来
9点了,看了一种答案
class Solution:
def generateParenthesis(self, n):
self.s = []
def generat(l, r, c):
if len(c) == 2 * n:
self.s.append(c)
return 0
if l < n:
generat(l + 1, r, c+'(')
if r < l:
generat(l, r + 1, c+')')
generat(0, 0, '')
return self.s
a=Solution.generateParenthesis(Solution,3)
print(a)
这种思想真的值得学习,这就是回溯法!太牛逼了!
leetcode 77
还是回溯,用的还是不熟练,继续搞!
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
all=[]
one=[]
def generate(all,one,k,n):
if len(one)==k:
all.append(one[:])
return
for i in range(len(n)):
one.append(n[i])
generate(all,one,k,n[i+1:])
one.pop()
generate(all,one,k,list(range(1,n+1)))
return all
all.append(one[:]) 这里注意,append里面一定要有==[:]==,如果没有,all放进去的是你这个one这元素,one怎么变化,all里的one就怎么变化!!!!
leetcode 78
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
all=[]
one=[]
def generate(all,one,k,n):
if len(one)==k:
all.append(one[:])
return
for i in range(len(n)):
one.append(n[i])
generate(all,one,k,n[i+1:])
one.pop()
generate(all,one,k,list(range(1,n+1)))
return all
和上一题用了一样的模板很类似,只不过多了一个控制one长度的循环