力扣——算法入门计划第十一天

目录

题目

回溯

代码 

题目 

思路 

代码 

题目

思路

代码 


题目

77. 组合

力扣——算法入门计划第十一天_第1张图片

回溯

1)先确定边界条件,if len(path) == k:
                res.append(path[:])

2)  dfs(i + 1, path + [i])  递归下一个元素

代码 

class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        def dfs(start, path):
            if len(path) == k:
                res.append(path)
                return
            upper_bound = n - (k - len(path)) + 1
            for i in range(start, upper_bound + 1):
                dfs(i + 1, path + [i])

        res = []
        dfs(1, [])
        return res

 

力扣——算法入门计划第十一天_第2张图片 

 

题目 

 46. 全排列

力扣——算法入门计划第十一天_第3张图片

思路 

力扣——算法入门计划第十一天_第4张图片

path记录结果,cand.....没用过的元素   最上面 不断遍历的数字

利用切片将i元素去掉

代码 

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        if len(nums) <= 1: return [nums]
        self.res = []
        def recur(path,cand):
            if len(cand)  == 0:
                self.res.append(path)
            for i,n in enumerate(cand):
                recur(path+[n],cand[:i]+cand[i+1:])
        recur([],nums)
        return self.res

力扣——算法入门计划第十一天_第5张图片

题目

784. 字母大小写全排列 

力扣——算法入门计划第十一天_第6张图片

思路

我们可以看到我们有三种选择
1.如果是大写则转换为小写
2.如果是小写则转换为大写
3.不进行转换

代码 

class Solution:
    def letterCasePermutation(self, s: str) -> List[str]:
        res = []
    
        def dfs(idx, n, s:str):
            if idx == n:
                res.append(s)
                return
            if s[idx].islower():
                dfs(idx + 1, n, s[:idx] + chr(ord(s[idx]) - 32) + s[idx + 1:])
            if s[idx].isupper():
                dfs(idx + 1, n, s[:idx] + chr(ord(s[idx]) + 32) + s[idx + 1:])
            dfs(idx + 1, n, s)
        dfs(0, len(s), s)
        return res

 力扣——算法入门计划第十一天_第7张图片

 

你可能感兴趣的:(python——力扣算法计划,算法,leetcode,职场和发展)