![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
回溯
枫流仁武
这个作者很懒,什么都没留下…
展开
-
LeetCode 78 子集
给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 from typing import * class Solution: def __init__(self): self.res = [] def subsets(self, nums: List[int]) -> List[List[int]]: self.back([], nums, 0) return self.原创 2020-09-20 10:06:33 · 55 阅读 · 0 评论 -
LeetCode 47 全排列2
给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] ] 官方方法的解释: 设我们有 33 个重复数排完序后相邻,那么我们一定保证每次都是拿从左往右第一个未被填过的数字,即整个数组的状态其实是保证了 [未填入,未填入,未填入] 到 [填入,未填入,未填入],再到 [填入,填入,未填入],最后到 [填入,填入,填入] 的过程的,因此可以达到去重的目标。 from typing imp...原创 2020-09-18 08:22:17 · 68 阅读 · 0 评论 -
LeetCode 37 解数独
编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字1-9在每一行只能出现一次。 数字1-9在每一列只能出现一次。 数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。 空白格用'.'表示。 直接莽,回溯遍历: from typing import * from collections import defaultdict class Solution: def solveSudoku(self, board: List[Lis...原创 2020-09-15 10:19:44 · 172 阅读 · 0 评论 -
LeetCode 79 单词搜索
给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 直接回溯算法进行搜索 from typing import * class Solution: def exist(self, board: List[List[str]], word: str) -> bool: m, n = len(board), len(boa原创 2020-09-13 08:25:40 · 67 阅读 · 0 评论 -
LeetCode 216 组合总和3
找出所有相加之和为n的k个数的组合。组合中只允许含有 1 -9 的正整数,并且每种组合中不存在重复的数字。 from typing import * class Solution: def __init__(self): self.res = [] def combinationSum3(self, k: int, n: int) -> List[List[int]]: self.back([], 1, 0, n, k) ...原创 2020-09-11 09:05:24 · 47 阅读 · 0 评论 -
LeetCode 40 组合总和2
给出两种去重的方法,其中第二种为官方方法,官方采用对每个值进行计数的方式去重。 class Solution: def __init__(self): self.res=[] ''' 去重的最好方法就是每一轮循环每个相同的元素只遍历一次 ''' def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]: candidate原创 2020-09-10 09:11:51 · 46 阅读 · 0 评论