leecode20,有效的括号,栈
class Solution: def isValid(self, s: str) -> bool: def check(ch1,ch2): if ch1 == '[' and ch2 == ']': return True elif ch1 == '(' and ch2 == ')': return True elif ch1 == '{' and ch2 == '}': return True else: return False stack = [] for i in range(len(s)): if len(stack) == 0 or check(stack[-1],s[i]) == False: stack.append(s[i]) elif check(stack[-1],s[i]) == True: stack.pop() if len(stack) == 0: return True else: return False
leecode22,括号生成,dfs+回溯,注意dfs时候的判断条件
class Solution: def generateParenthesis(self, n: int): ans = [] path = [] def dfs(l,r,path): if r==n: ans.append("".join(path)) return if l<n: path.append('(') dfs(l+1,r,path) path.pop() if l>r: path.append(')') dfs(l,r+1,path) path.pop() return dfs(0,0,[]) return ans
leecod17,电话号码的组合,dfs+回溯:停止条件,循环回溯剪枝
class Solution: def letterCombinations(self, digits: str): ans = [] res = [] hash_map = {2:"abc",3:"def",4:"ghi",5:"jkl",6:"mno",7:"pqrs",8:"tuv",9:"wxyz"} if digits == "": return [] def dfs(i,path): if i == len(digits): ans.append("".join(path)) return for ch in hash_map[int(digits[i])]: path.append(ch) dfs(i+1,path) path.pop() return dfs(0,[]) return ans
17,20,22,39