随笔分类 - LeetCode
摘要:110. Balanced Binary Tree 题意:判断树是否是平衡树,平衡树的定义是任何一个结点的左子树和右子树高度差不超过1; 思路:既然是要求每个结点,那么就要dfs每个结点,然后比较它们的左右子结点的高度差即可。 class Solution(object): def isBalanc
        阅读全文
                
摘要:10. 正则表达式匹配 题意 给定一个字符串 (s) 和一个字符模式 (p)。实现支持 '.' 和 '*' 的正则表达式匹配。 匹配应该覆盖整个字符串 (s) ,而不是部分字符串。 说明: s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 
        阅读全文
                
摘要:236. Lowest Common Ancestor of a Binary Tree # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # 
        阅读全文
                
摘要:350. Intersection of Two Arrays II 题目:和前面不一样的是,它允许出现多个次数。 Counter 利用两个Counter来进行统计,需要注意的是,需要取两个Counter中个数的较小值,时间复杂度为O(min(m, n)) import collections cl
        阅读全文
                
摘要:98. 验证二叉搜索树 题意 判断二叉树是否是BST,要求不能出现等于的情况,也就是左子树必须比结点小,右子树必须比结点大。 解题思路 如果对于BST的理解没有那么到位的话,可能就会写出下面的代码: 这么会存在一个问题,上面仅仅是判断了当前结点和左右子树的值,则没有考虑到祖父结点和父亲结点和子结点的
        阅读全文
                
摘要:111. Minimum Depth of Binary Tree 题意:二叉树的最小路径 DFS class Solution(object): res = 1e9 def minDepth(self, root): """ :type root: TreeNode :rtype: int """
        阅读全文
                
摘要:[LeetCode] Maximum Size Subarray Sum Equals k 最大子数组之和为k 因为题目要求使用O(n)的复杂度,那么之前在min中O(nlogn)做法就不行了。 我们可以使用字典来保存前面的数的和,然后在遍历的时候检查当前和与目标值之差是否存在,如果存在则说明构成一
        阅读全文
                
摘要:209. Minimum Size Subarray Sum 题意:找到和为给定值的最小连续区间 O(n) 暴力 TLE class Solution(object): def minSubArrayLen(self, s, nums): """ :type s: int :type nums: L
        阅读全文
                
摘要:516. Longest Palindromic Subsequence 题意:求字符串中回文串的最大长度。 动态规划 分析:假设dp[i][j]为字符串从i到j的回文串的最大长度,如果字符i等于j,则将之前的长度加上2;如果不相等,那么要么忽略i,要么忽略j,取两者的最大值,所以状态转移方程为: 
        阅读全文
                
摘要:124. 二叉树中的最大路径和 题意 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。 示例 1: 示例 2: 解题思路 没仔细看题,以为没有负数,而且要从跟结点到叶结点,那么显然就是左子树的最大和加
        阅读全文
                
摘要:77. 组合 题意 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。 示例: 解题思路 超时了,于是我想到了之前一种比较巧妙的迭代方法,可以获取到第index的内容,如下: 实现 不像排列,任意位置进行交换,组合只能是按照顺序的。 使用原生的combinations来实
        阅读全文
                
摘要:567. Permutation in String 一开始想到的就是计算出所有的排列,然后一一判断是否是子串,但是TLE。 class Solution(object): def checkInclusion(self, s1, s2): """ :type s1: str :type s2: s
        阅读全文
                
摘要:79. Word Search 题意:判断某个字符串是否按照数组中相邻的顺序,同时同一个位置的字符不能使用两次。 个人觉得这道题真的非常回溯,很典型的回溯思想。 回溯 思路:先遍历找到起始字符,然后利用回溯来确定是否符合题目条件,因为题目要求不能重复使用,所以我用一个set来纪录使用过的字符的坐标。
        阅读全文
                
摘要:131. Palindrome Partitioning 回溯 直接在s上进行操作。 class Solution(object): def partition(self, s): """ :type s: str :rtype: List[List[str]] """ def backtracki
        阅读全文
                
摘要:216. 组合总和 III 题意 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。 示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3,
        阅读全文
                
摘要:113. Path Sum II 这里需要注意的是,不要直接递归而不判断是否存在子结点,那么样做的后果就是左结点的遍历和右结点的遍历生成相同的结果,导致最后的结果中都存在重复路径。 DFS class Solution(object): def pathSum(self, root, sum): "
        阅读全文
                
摘要:257. Binary Tree Paths class Solution(object): def binaryTreePaths(self, root): """ :type root: TreeNode :rtype: List[str] """ def helper(node, path):
        阅读全文
                
摘要:104. Maximum Depth of Binary Tree class Solution(object): res = 1 def maxDepth(self, root): """ :type root: TreeNode :rtype: int """ def helper(cur, p
        阅读全文
                
摘要:101. Symmetric Tree 题意:判断是否是镜像树,也就是结点的最左子树是否和最右子树是否是相等的。 DFS 思路:如果想比较结点的最左子树和最右子树,那么这就是后序遍历,也就是左右中的顺序。 class Solution(object): def isSymmetric(self, r
        阅读全文
                
摘要:100. Same Tree DFS 递归 class Solution(object): def isSameTree(self, p, q): """ :type p: TreeNode :type q: TreeNode :rtype: bool """ if not p and not q:
        阅读全文
                
 
                    
                
 浙公网安备 33010602011771号
浙公网安备 33010602011771号