- 博客(117)
- 收藏
- 关注
原创 二叉树非递归遍历
def pre_order(root): """ 前序: 根 左 右 stack: 入栈顺序: 右 左 出栈顺序: 左 右 """ if not root: return [] stack = [] res = [] stack.append(root) while ...
2019-09-01 10:22:52
106
转载 103. 二叉树的锯齿形层次遍历
解分析接着上一题的思路我们用队列q遍历树的节点 顺序永远是 从左往右 从上往下定义一个 l2r 记录当前层我们应该 从左往右 还是 从右往左当 从左往右 时,order添加当前node的val到队尾当 从右往左 时,order添加当前node的val到队首# Definition for a binary tree node.# class TreeNode:# ...
2019-05-25 17:19:03
201
转载 102. 二叉树的层次遍历
解 队列分析用队列存放节点 先进先出每次进入循环时 弹出该层所有节点每次循环末尾 result添加该层节点val列表# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None...
2019-05-25 16:56:08
130
转载 98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。解1 递归需要注意的是:根节点的左子树的所有节点都要小于根节点;根节点的右子树的所有节点的值都要大于根节点,因此递归是不能只判断当前节点与其左节点和右节点解决办法:递归每个节点时,带...
2019-05-23 11:35:35
90
转载 95. 不同的二叉搜索树 II
解递归例如:1 2 3取3为根节点 则其左子树包括 1 和 2 ,右子树没有节点对于左子树 1 和 2 可以取1为根节点 或 取2为根节点取1为根节点 则左子树没有节点 右子树节点为2取2为根节点 则左子树节点为2 右子树没有节点# Definition for a binary tree node.# class TreeNode:# def __in...
2019-05-23 10:50:44
206
转载 96. 不同的二叉搜索树
解 动态规划https://blog.csdn.net/qq_17550379/article/details/84632621f(i)表示 当有i个节点时,二叉树结构的个数,则f(0) = 1f(1) = 1f(i) = f(0)*f(i-1) + f(1)*f(i-2) + …+ f(i-1)*f(0)class Solution: def numTrees(self...
2019-05-21 10:58:31
58
转载 145. 二叉树的后序遍历
解后序遍历:左 右 根递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: d...
2019-05-21 10:39:36
102
转载 144. 二叉树的前序遍历
解前序遍历:根 左 右递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: d...
2019-05-21 10:19:08
59
转载 94. 二叉树的中序遍历
解根在中间左 根 右递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: d...
2019-05-21 10:07:41
66
转载 92. 反转链表 II
解遍历翻转保存将来要用的节点翻转部分头部的前一个节点翻转部分尾部节点翻转后 更新cur 所需要的节点# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Nonecla...
2019-05-17 11:38:29
63
转载 206. 反转链表
解1遍历翻转# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def reverseList(self, head: ListNode...
2019-05-17 11:19:33
72
转载 91. 解码方法
解动态规划 + 分情况讨论前一位当前位00、1-910、1-920、1-6、7-9class Solution: def numDecodings(self, s: str) -> int: s = list(s) n = len(s) if s[0]...
2019-05-17 10:49:44
265
转载 90. 子集 II
解 递归 深度优先遍历注意排序 使重复元素相邻for循环进入递归时,若当前元素与前一个元素相同,则不进入递归class Solution: def subsetsWithDup(self, nums: List[int]) -> List[List[int]]: # 排序 使重复元素相邻 nums.sort() ...
2019-05-16 11:32:45
87
转载 89. 格雷编码
解class Solution: def grayCode(self, n: int) -> List[int]: result = list() for i in range(1 << n): result.append(i ^ (i >> 1)) ...
2019-05-16 11:20:57
70
转载 86. 分隔链表
解维护两个链表小于x的链表大于等于x的链表之后更新两个链表的尾部的next小于x的尾部 链接到 大于等于x的尾部大于等于x的尾部 链接到 None (避免可能出现的循环)# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val ...
2019-05-16 11:01:52
83
转载 82. 删除排序链表中的重复元素 II
解# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def deleteDuplicates(self, head: ListNode)...
2019-05-16 10:23:31
71
转载 81. 搜索旋转排序数组 II
解二分查找找到第二个有序数组的起始索引对两个有序数组进行二分查找class Solution: def search(self, nums: List[int], target: int) -> bool: # 找第二个有序数组的起始索引 k = 0 while k < len(n...
2019-05-16 10:00:48
75
转载 80. 删除排序数组中的重复项 II
解1 摩尔投票法https://blog.csdn.net/qq_17550379/article/details/80492307class Solution: def removeDuplicates(self, nums: List[int]) -> int: # 初始化填坑位置 k = 0 ...
2019-05-15 22:06:28
72
转载 79. 单词搜索
递归class Solution: def exist(self, board: List[List[str]], word: str) -> bool: self.lx = len(board) - 1 self.ly = len(board[0]) - 1 m = len(board) ...
2019-05-15 17:19:23
101
转载 78. 子集
解递归dfs 深度优先遍历class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: result = list() path = list() self.dfs(nums, path, result) ...
2019-05-15 15:55:48
50
转载 77. 组合
解1 递归 深度优先遍历class Solution: def combine(self, n: int, k: int) -> List[List[int]]: nums = [i for i in range(1, n + 1)] result = list() path = [] ...
2019-05-15 15:47:10
91
转载 75. 颜色分类
解1 快速排序class Solution: def sortColors(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ n = len(nums) ...
2019-05-15 15:29:55
140
转载 74. 搜索二维矩阵
解1 二分搜索两次二分搜索在第一列二分搜索target退出循环后 matrix[r][0] < target; matrix[l][0] > target (如果都存在)在 matrix的r索引行 二分搜索targetclass Solution: def searchMatrix(self, matrix: List[List[int]], targe...
2019-05-14 20:31:21
64
转载 73. 矩阵置零
解运用集合,存入要赋值为0的行和列class Solution: def setZeroes(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ ...
2019-05-14 19:43:52
108
转载 64. 最小路径和
动态规划grid[i][j] 表示从左上角开始 走到 i j 位置的最小路径和第一列 依次相加第一行 依次相加当 i > 1 and j > 1时 grid[i][j] += min(grid[i - 1][j], grid[i][j - 1])class Solution: def minPathSum(self, grid: List[List[int]])...
2019-05-14 19:32:27
97
转载 63. 不同路径 II
解1 递归dfs深度优先超出时间限制class Solution: def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int: if obstacleGrid == []: return 0 if...
2019-05-14 17:20:33
92
转载 62. 不同路径
解1 递归dfs深度优先遍历但超出时间限制class Solution: def uniquePaths(self, m: int, n: int) -> int: result = list() self.dfs(m - 1, n - 1, result) return sum(result) ...
2019-05-14 16:39:39
102
转载 61. 旋转链表
解双指针计算链表长度 count,将k设置为 k % count,防止重复旋转i指向head;j指向与head距离为k的节点i j 同时向后遍历 直到 j 指向尾节点旋转# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x...
2019-05-14 15:54:06
59
转载 60. 第k个排列
解例如:输入: n = 4 k = 1010 = 3! * 1 + 44 = 2! * 2 + 0表明 第10个排列位于2 分支下的 (余数 > 0)第2个分支下的 (余数 == 0)最后一个排列即 2 3 4 1class Solution: def getPermutation(self, n: int, k: int) -> str: ...
2019-05-13 20:45:36
61
转载 59. 螺旋矩阵 II
解四种遍历 及其 坐标更新方式left to rightx += 0y += 1up to downx += 1y += 0right to leftx += 0y -= 1down to upx -= 1y += 0一轮 四种遍历 后,将坐标更新到新一轮的初始位置 x += 1 y += 1初始步长 step = n - 1, 之后...
2019-05-13 19:59:46
81
转载 56. 合并区间
解遍历求解class Solution: def merge(self, intervals: List[List[int]]) -> List[List[int]]: n = len(intervals) if n <= 1: return intervals ...
2019-05-13 19:13:34
97
转载 55. 跳跃游戏
解1动态规划f(i) 表示当前所能跳跃到的最大索引f(0) = 0当f(i - 1) >= i时, f(i) = max(f(i - 1), i + nums[i])当f(i - 1) < i时, f(i) = f(i - 1) 即跳跃到的最大索引不会更新了class Solution: def canJump(self, nums: List[int]) -...
2019-05-13 10:53:19
53
转载 54. 螺旋矩阵
解根据题意 螺旋遍历class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: if matrix == []: return list() # 定义 上下左右 未遍历边界 up...
2019-05-12 21:28:40
150
转载 50. Pow(x, n)
解1 递归(1)每次递归进入 对幂-1,但超出时间限制class Solution: def myPow(self, x: float, n: int) -> float: if n == 0: return 1.0 if n < 0: x = 1 / x...
2019-05-12 17:09:29
74
转载 49. 字母异位词分组
解字典key 为排序字符串value 为出现的第几个字母异位词class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: result = list() # key 为排序字符串 value 为resul...
2019-05-12 16:26:14
61
转载 48. 旋转图像
n * n 二维矩阵旋转90度解转置倒序每行class Solution: def rotate(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ ...
2019-05-12 16:07:05
57
转载 47.全排列 II
解递归 深度优先遍历dfs排序 可通过比较前一个数来避免重复排列class Solution: def permuteUnique(self, nums: List[int]) -> List[List[int]]: # 排序 nums.sort() result = list() ...
2019-05-12 15:57:05
127
转载 面试题4:二维数组中的查找
剑指offer p44解从右上角或左下角开始,每次循环剔除一行或一列,逐渐缩小范围def find_integer(matrix, num): """ :param matrix: [[]] :param num: int :return: bool """ if not matrix: return False ro...
2019-05-12 13:59:58
123
转载 46. 全排列
解1 字典序注意 切片 浅拷贝class Solution: def permute(self, nums: List[int]) -> List[List[int]]: n = len(nums) count = 1 for i in range(1, n + 1): c...
2019-05-12 13:51:26
65
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人