Leetcode
张小莹说她很忙
坚持博客,记录进步点滴,相信积累的力量。
展开
-
207. leetcode 课程表
题目:现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的...原创 2019-01-04 11:59:10 · 445 阅读 · 0 评论 -
104. 二叉树的最大深度
思路:递归实现:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution(o...原创 2019-04-10 10:53:07 · 99 阅读 · 0 评论 -
111. 二叉树的最小深度
思路:递归# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution(obje...原创 2019-04-10 11:13:00 · 106 阅读 · 0 评论 -
102. 二叉树的层次遍历
# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution(object): ...原创 2019-04-10 11:30:45 · 123 阅读 · 0 评论 -
103. 二叉树的锯齿形层次遍历
思路:层次遍历:下面这中方式复杂化了:变动了结点# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Non...原创 2019-04-10 16:26:34 · 155 阅读 · 0 评论 -
112. 路径总和
思路:找到递归结束的判决条件: if not root: return False if not root.left and not root.right and root.val == s: return True代码如下:# Definition for a binary tree node.# class...原创 2019-04-10 20:39:00 · 185 阅读 · 0 评论 -
847. 访问所有节点的最短路径(无向连通图的最短路径)
无向连通图的最短路径!!!参考:https://www.cnblogs.com/MrSaver/p/9465181.html思路:from collections import deque, namedtupleclass Solution(object): def shortestPathLength(self, graph): """ :ty...原创 2019-04-10 21:14:45 · 7681 阅读 · 1 评论 -
437. 路径总和 III
思路:一:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution(obje...原创 2019-04-10 19:33:19 · 242 阅读 · 0 评论 -
113. 路径总和 II
思路:运用递归,首先要判断递归结束的条件。1. 限制条件是从根到叶子结点!if not node: return # 只要没达到叶子结点,就一路存储结点 tmp.append(node.val) 2. 找到需要的道路(判决条件): # 需要的道路(判决条件):到达叶子结点且道路总和为sif not node.left and not node.right a...原创 2019-04-10 20:13:44 · 133 阅读 · 0 评论 -
141. 环形链表
思路:原创 2019-03-29 10:27:31 · 73 阅读 · 0 评论 -
787. K 站中转内最便宜的航班(加权有向图的最短路径)
题目:思路: 加权图的最短路径1. 首先将航线转化为字典形式存储。(当前城市–下一城市–费用)2. 建一个双向队列,元素为元组形式。(当前城市,src到当前城市的费用,中转次数)3. 记录src到目的地dst的最小费用cheapest=1e6。(先设置为一个很大的数,这样在最后若cheapest=1e6,则说明没有从src到dst的路径,此时,返回-1)4. 然后处理队列:4...原创 2019-03-29 10:54:39 · 666 阅读 · 0 评论 -
332. 重新安排行程
思路:方法一:dfs加回溯class Solution: def findItinerary(self, tickets: List[List[str]]) -> List[str]: from collections import defaultdict graph = defaultdict(list) for i in ...原创 2019-04-10 10:20:11 · 462 阅读 · 0 评论 -
997. 找到小镇的法官
class Solution(object): def findJudge(self, N, trust): """ :type N: int :type trust: List[List[int]] :rtype: int """ res = [0] * N res_1 = ...原创 2019-03-30 11:48:37 · 217 阅读 · 0 评论 -
485. 最大连续1的个数
方法一:class Solution(object): def findMaxConsecutiveOnes(self, nums): """ :type nums: List[int] :rtype: int """ res = ''.join(str(x) for x in nums).split('0...原创 2019-03-30 10:54:47 · 99 阅读 · 0 评论 -
530. 二叉搜索树的最小绝对差
注意:二叉搜索树的性质:任意节点x,其左子树中的key不大于x.key,其右子树中的key不小于x.key。因此,中间节点的值一定是其左右节点值的中间数,因此最小差别一定是在中间节点与左右节点之间思路: 中序遍历二叉搜索树,每次比较当前节点与前一节点差值的绝对值与目前result中保存的最小值的大小,将较小的保存在result中。第一直觉:用 gloabal 辅助中序遍历80秒...原创 2019-01-03 16:33:26 · 230 阅读 · 0 评论 -
二叉树(前序,中序,后序,层序)遍历递归与循环的python实现
待整理,可参考博文:https://www.cnblogs.com/bjwu/p/9284534.html原创 2019-01-04 11:59:31 · 264 阅读 · 0 评论 -
938. 二叉搜索树的范围和
思路: 明确二叉搜索树的性质。按中序遍历后得到的数组是升序排列的。L和R中间的数其实也相当于[L, R]之间的数。这样有几种方法可以得到:注意: root = [10, 5, 15, 3, 7, 13, 18, 1, null, 6] 是按层从左到右给出的。方法一、直接遍历二叉树,遍历过程中直接把[L, R]之间的数相加。遍历条件: if node.val < R: ...原创 2019-01-04 11:58:36 · 290 阅读 · 0 评论 -
665. 非递减数列
思路: 遍历整个数组,如果遇到nums[i]>nums[i+1]的情况,则要么修改nums[i],要么修改nums[i+1]。若修改一次就能成功,则去掉nums[i]或者num[i+1],剩下的数组必然是非递减的。class Solution: def checkPossibility(self, nums): """ :type nums: Li...原创 2019-01-04 16:20:19 · 116 阅读 · 0 评论 -
210. 课程表 II
现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例 1:输入: 2, [[1,0]] 输出: ...原创 2019-01-04 11:59:44 · 191 阅读 · 0 评论 -
107. 二叉树的层次遍历 II
想法:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def levelO...原创 2019-01-03 14:21:10 · 149 阅读 · 0 评论 -
72. 编辑距离
动态规划:将大问题分解为小问题。用一个二维数组dp[i][j]表示word1的前i个字符匹配到word2的前j个字符需要几次操作。class Solution(object): def minDistance(self, word1, word2): """ :type word1: str :type word2: str ...原创 2019-03-29 15:53:08 · 89 阅读 · 0 评论 -
967. 连续差相同的数字
思路:N位数,可以先找到满足条件的一位数、二位数、三位数。。。直到N维数。class Solution(object): def numsSameConsecDiff(self, N, K): """ :type N: int :type K: int :rtype: List[int] """ ...转载 2019-03-30 08:55:14 · 198 阅读 · 0 评论 -
837. 新21点
思路:动态规划类似爬楼梯的问题,每次可以跨[1,W]个楼梯,当一共爬了K个和以上的台阶时停止,问这个时候总台阶数<=N的概率。使用动态规划,dp[i]表示得到点数i的概率,只有当现在的总点数少于K的时候,才会继续取数。那么状态转移方程可以写成:1. 当i <= K时,dp[i] = (前W个dp的和)/ W;(爬楼梯得到总楼梯数为i的概率)2. 当K < i <...原创 2019-03-30 10:28:14 · 162 阅读 · 0 评论 -
973. 最接近原点的 K 个点
class Solution(object): def kClosest(self, points, K): """ :type points: List[List[int]] :type K: int :rtype: List[List[int]] """ res = [] ...原创 2019-03-30 10:36:31 · 151 阅读 · 0 评论 -
310. 最小高度树
对于一个具有树特征的无向图,我们可选择任何一个节点作为根。图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树。给出这样的一个图,写出一个函数找到所有的最小高度树并返回他们的根节点。思路:最小高度的树的根一定不会在叶子节点取得!(怎么判断是叶子呢?它的邻边数量为1)每一轮修剪一次剩余的所有叶子节点,一旦节点数量只有1或者2,停止修剪,返回答案。class Solut...原创 2019-04-08 17:17:20 · 297 阅读 · 0 评论