- 电话号码的字母组合
-
给定一个仅包含数字
2-9
的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
-
class Solution: def letterCombinations(self, digits: str) -> List[str]: dic = {'2':['a','b','c'], '3':['d','e','f'], '4':['g','h','i'], '5':['j','k','l'], '6':['m','n','o'], '7':['p','q','r','s'], '8':['t','u','v'], '9':['w','x','y','z'] } if len(digits) == 0: return [] elif len(digits) == 1: return dic[digits[0]] else: res = [] tmp = self.letterCombinations(digits[1:]) for ch in dic[digits[0]]: for strs in tmp: res.append(ch+strs) return res
通过
-
-
生成括号
-
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
-
class Solution: def generateParenthesis(self, n: int) -> List[str]: if n == 0: return [""] elif n == 1: return ["()"] elif n == 2: return ["(())","()()"] else: res = [] for i in range(n): j = n - i - 1 left = self.generateParenthesis(i) right = self.generateParenthesis(j) #print(['({}){}'.format(l,r) for l in left for r in right]) res.extend(['({}){}'.format(l,r) for l in left for r in right]) print(i,j,res) return res
通过,这个题比较难理解
-
-
全排列
-
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
-
class Solution: def permute(self, nums: List[int]) -> List[List[int]]: if len(nums) == 0: return [] elif len(nums) == 1: return [nums] elif len(nums) == 2: return [nums,nums[::-1]] else: res = [] tmp = self.permute(nums[:-1]) for i in tmp: for j in range(len(nums)): res.append(i[:j]+[nums[-1]]+i[j:]) return res
通过
-
-
子集
-
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
-
class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: if len(nums) == 0: return [[]] elif len(nums) == 1: return [[],nums] else: tmp = self.subsets(nums[:-1]) res = [] for i in tmp: res.append(i.copy()) i.append(nums[-1]) res.append(i) return res
通过
-
-
单词搜索
-
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
-
leetcode - 刷题记录-探索中级算法-回溯算法
猜你喜欢
转载自blog.csdn.net/qq_32110859/article/details/105217164
今日推荐
周排行