【python语法细节】容易出错的点
2021-07-23 本文已影响0人
何几时
leetcode 22
错误写法,把 subStr += '('
当作参数放进去
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
# corner case
if n == 0:
return []
retList = []
self.backTracking(n, 0, 0, retList, "")
return retList
def backTracking(self, n, left, right, retList, subStr):
# 剪枝条件
if right > left:
return
# 终止条件
if left == n and right == n:
retList.append(subStr)
return
# 递归拆解
if left < n:
self.backTracking(n, left+1, right, retList, subStr+='(')
self.backTracking(n, left, right+1, retList, subStr+=')')
elif left == n:
self.backTracking(n, left, right+1, retList, subStr+=')')
正确写法√√√:把 oneStr+'('
放进去
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
leftNum, rightNum = 0, 0
retList = []
initStr = ""
self.helper(n, initStr, leftNum, rightNum, retList)
return retList
def helper(self, n, oneStr, leftNum, rightNum, retList):
# 剪枝操作
if rightNum > leftNum:
return
# 终止条件
if leftNum == n and rightNum == n and len(oneStr) == 2*n:
retList.append(oneStr)
return
# 递归拆解
if leftNum < n:
self.helper(n, oneStr+'(', leftNum+1, rightNum, retList)
if rightNum < leftNum:
self.helper(n, oneStr+')', leftNum, rightNum+1, retList)