【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成

简介: 【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成

递归

字母大小写全排列

class Solution:
    def letterCasePermutation(self, S: str) -> List[str]:
        def DFS(s_list, index):
            if index == len(s_list):
                res.append(''.join(s_list))
                return 
            # 未修改当前字符(字母或者数字)的一条分支  
            DFS(s_list, index + 1)
            # 修改当前字母的的另一条分支
            if s_list[index].isalpha():
                s_list[index] = chr(ord(s_list[index]) ^ 32)
                DFS(s_list, index + 1)
        res = []
        S = list(S)
        DFS(S, 0)
        return res
# 回溯
class Solution:
    def permutation(self, s: str) -> List[str]:
        def backtrack(s, cur_s):
            if len(cur_s) == len(s):
                res.append(cur_s)
                return
            for i in range(len(s)):
                if i > 0 and s[i] == s[i-1] and visited[i-1] == False:
                    continue
                if visited[i] == False:
                    visited[i] = True
                    backtrack(s, cur_s + s[i])
                    visited[i] = False
        res = []
        visited = [False for _ in range(len(s))]
        s = ''.join(sorted(list(s)))
        backtrack(s,'')
        return res

22.括号生成

class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        res = []
        def generator(left, right, s):
            if left == n and right == n:
                res.append(s)
                return
            if left < n:
                generator(left+1, right, s + '(')
            if left > right:
                generator(left, right+1, s + ')')
        generator(0,0,'')
        return res


相关文章
|
1天前
|
算法 Java
[Java·算法·简单] LeetCode 283. 移动零
[Java·算法·简单] LeetCode 283. 移动零
10 2
|
1天前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
9 2
|
3天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
3天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
5天前
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
|
5天前
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
|
5天前
|
索引
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
|
5天前
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
|
5天前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
5天前
|
算法 容器
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词