【Leetcode题解】
文章平均质量分 72
蛮三刀酱
这个作者很懒,什么都没留下…
展开
-
【Leetcode】【python】Number of Segments in a String
题目大意计算字符串中的非空子串的个数。解题思路split()代码split即可总结这题对于python来说有点智障,然而智障的我还是把他想复杂了,我写的是:class Solution(object): def countSegments(self, s): """ :type s: str :rtype: int """原创 2017-07-11 01:04:59 · 705 阅读 · 0 评论 -
【Leetcode】【python】Hamming Distance, Merge Two Binary Trees
题目大意:两个整数的汉明距离是指其二进制不相等的位的个数。 给定两个整数x和y,计算汉明距离。原创 2017-06-29 06:47:57 · 567 阅读 · 0 评论 -
【Leetcode】【python】Factorial Trailing Zeroes
题目大意给定一个整数n,返回n!(n的阶乘)数字中的后缀0的个数。 注意:你的解法应该满足多项式时间复杂度。解题思路思路参考:书影博客朴素解法:首先求出n!,然后计算末尾0的个数。(重复÷10,直到余数非0)该解法在输入的数字稍大时就会导致阶乘得数溢出,不足取。O(logn)解法:一个更聪明的解法是:考虑n!的质数因子。后缀0总是由质因子2和质因子5相乘得来的。如果我们可以计数2和5的个数,问题就原创 2017-07-12 01:35:52 · 475 阅读 · 0 评论 -
【Leetcode】【python】Array Partition I, Number Complement
Array Partition I题目大意给定一个长度为2n的整数数组,将数组分成n组,求每组数的最小值之和的最大值解题思路偶数数组,排序后奇数位置所有相加就可以原创 2017-07-01 00:40:57 · 530 阅读 · 0 评论 -
【Leetcode】【python】Arranging Coins
Arranging Coins标准答案代码来自书影博客题目大意你有n枚硬币,想要组成一个阶梯形状,其中第k行放置k枚硬币。 给定n,计算可以形成的满阶梯的最大行数。 n是非负整数,并且在32位带符号整数范围之内。解题思路数学方法每行想填满需要k*(k+1)/2个硬币二分枚举答案(Binary Search)其实还是k*(k+1)/2的思路啊代码数学方法class Solution(object)原创 2017-07-05 01:42:59 · 794 阅读 · 0 评论 -
[Leetcode][python]Palindrome Number/回文数
题目大意判断一个整数(integer)是否是回文,不要使用额外的空间。解题思路大概就是告诉我们:1,负数都不是回文数;2,不能通过将数字转为字符串来判断回文,因为使用了额外的空间(即只能使用空间复杂度 O(1) 的方法);3,注意整数溢出问题;4,这个问题有一个比较通用的解法。代码生成一个反转整数,通过比较反转整数和原整数是否相等来判断回文。 见我提交的代码。 如果要进一步改进,实际上将原数字反原创 2017-07-07 07:57:26 · 663 阅读 · 0 评论 -
[Leetcode][python]Pascal's Triangle/Pascal's Triangle II/杨辉三角/杨辉三角 II
Pascal’s Triangle题目大意输出帕斯卡三角前N行 1 121 1331解题思路注意帕斯卡三角中,除了首尾,其他值为上一层的两个邻值的和代码class Solution(object): def generate(self, numRows): """ :type numRows: int :rtype: List[List原创 2017-07-08 06:48:19 · 592 阅读 · 0 评论 -
[Leetcode][Python/Java]Binary Tree Level Order Traversal/二叉树层序遍历
题目大意实现树的广度优先遍历,每一层上的数据按照从左到右的顺序排列。解题思路参考:链接 将树每一层的节点存在一个列表中,遍历列表中的元素,如果该节点有左右节点的话,就把它们加入一个临时列表,这样当遍历结束时,下一层的节点也按照顺序存储好了,不断循环直到下一层的列表为空。代码BFSclass Solution(object): def levelOrder(self, root):原创 2017-07-20 04:42:31 · 1473 阅读 · 0 评论 -
[Leetcode][python]Binary Tree Zigzag Level Order Traversal
题目大意按之字形遍历二叉树(一正一反)解题思路来自:链接 解题思路:这道题和上一题层序遍历那道题差不多,区别只是在于奇数层的节点要翻转过来存入数组。 代码:代码BFSclass Solution(object): def zigzagLevelOrder(self, root): tree = [] if not root: ret原创 2017-07-21 06:50:27 · 1561 阅读 · 3 评论 -
[Leetcode][python]Unique Binary Search Trees II
题目大意给出一个n,求1-n能够得到的所有二叉搜索树,输出所有树解题思路递归拼接树该题较难,参考题解的思路。从start到end,先把左右字数的所有可能先迭代出来,之后递归加入左右字数,生成每一颗新树。代码class Solution(object): def generateTrees(self, n): if n == 0: ...原创 2017-07-30 03:20:21 · 1576 阅读 · 0 评论 -
[Leetcode][python]Maximum Depth of Binary Tree/二叉树的最大深度
题目大意求二叉树最大深度解题思路递归代码递归def maxDepth(self, root): if root == None: return 0 return max(self.maxDepth(root.left),self.maxDepth(root.right))+1递归(沿用修改前两题代码)class Solution(object)原创 2017-07-22 07:55:54 · 1429 阅读 · 0 评论 -
[Leetcode][python]Symmetric Tree/对称二叉树
题目大意判断一个树是否左右对称解题思路非递归解法按层遍历,每一层检查一下是否对称。递归解法其中左子树和右子树对称的条件: 两个节点值相等,或者都为空 左节点的左子树和右节点的右子树对称 左节点的右子树和右节点的左子树对称代码递归(清晰易懂版)class Solution(object): def judge(self, p, q): if p == None and q原创 2017-07-19 02:04:21 · 1622 阅读 · 0 评论 -
[Leetcode][python]从前序与中序遍历序列构造二叉树/从中序与后序遍历序列构造二叉树
题目大意根据二叉树的前序遍历和中序遍历( 中序和后序)结果生成二叉树 假设没有重复数字解题思路参考给中序和后序遍历 看到树首先想到要用递归来解题。以这道题为例:如果一颗二叉树为{1,2,3,4,5,6,7},则中序遍历为{4,2,5,1,6,3,7},后序遍历为{4,5,2,6,7,3,1},我们可以反推回去。由于后序遍历的最后一个节点就是树的根。也就是root=1,然后我们在...原创 2017-07-23 12:48:16 · 3965 阅读 · 0 评论 -
[Leetcode][python]Longest Substring Without Repeating Characters/无重复字符的最长子串
题目大意给定一个字符串,从中找出不含重复字符的最长子串的长度。 例如,”abcabcbb”的不含重复字母的最长子串为”abc”,其长度是3。”bbbbb”的最长子串是”b”,长度为1。解题思路哈希表 双指针来自博客变量start和end分别记录子串的起点和终点 从左向右逐字符遍历原始字符串,每次将end + 1 字典countDict存储当前子串中各字符的个数 当...原创 2017-08-08 00:58:30 · 1571 阅读 · 0 评论 -
[Leetcode][python]Longest Palindromic Substring/最长回文子串
题目大意给出一个字符串S,找到一个最长的连续回文串。解题思路经典讲解参考: https://www.cnblogs.com/bitzhuwei/p/Longest-Palindromic-Substring-Par-I.html#_labelTop暴力穷举法O(N3) 显然有C(N,2)(组合)个子串。检测每个子串都需要O(N)的时间,所以此方法的时间复杂度为O(N3)。...原创 2017-08-08 04:23:11 · 1551 阅读 · 0 评论 -
[Leetcode][python]Validate Binary Search Tree
题目大意判断一棵树是否为二叉搜索树解题思路想到了中序遍历整棵树,那么结果应该是升序的。直接套用之前的中序遍历代码,稍加修改即可。 网上的答案很多都在分析负无穷正无穷(效率高?),我觉得能和之前中序遍历串起来就足够了。代码中序遍历(生成数组后判断是否为升序)class Solution(object): def inorderTraversal(self, root, inorder):原创 2017-08-01 04:55:17 · 1578 阅读 · 0 评论 -
[Leetcode][python]Recover Binary Search Tree/恢复二叉搜索树
题目大意一颗二叉查找树中的某两个节点被错误的交换了,需要恢复成原来的正确的二叉查找树。挑战:是要求空间复杂度为常数空间。空间复杂度为O(N)是常规解法。解题思路来自:博客算法一: 思路很简单,一颗二叉查找树的中序遍历应该是升序的,而两个节点被交换了,那么对这个错误的二叉查找树中序遍历,肯定不是升序的。那我们只需把顺序恢复过来然后进行重新赋值就可以了。(可针对任意个数目的节点错乱的情况)算法二:原创 2017-08-02 04:46:56 · 1306 阅读 · 0 评论 -
[Leetcode][python]Same Tree/相同的树
题目大意判断两颗二叉树是否完全相同解题思路简单题,一开始思考半天中序遍历的解法,发现太绕。 其实应该就是先根节点,再左右,也就是前序遍历。代码class Solution(object): def isSameTree(self, p, q): if p == None and q == None: return True if p and q and p.原创 2017-08-02 05:27:44 · 663 阅读 · 0 评论 -
[Leetcode][python]ZigZag Conversion/Z字形变换
题目大意在行数row给定时,字符串“PAYPALISHIRING”的Z字形(zigzag)输出解题思路不涉及某种算法,考察思路。创建一个二维数组,里面有row个数组。设置好step=+1,一步步到了第3(row)步,将step设置为-1,往回走一步,再往回走一步,只到回到第一步,再将step设置为+1,如此循环。最后将二维数组内list合并代码class Solution(object):原创 2017-08-09 01:49:56 · 1096 阅读 · 0 评论 -
[Leetcode][python]Reverse Integer/反转整数
题目大意反转整数123变为321,-123变为-321注意:在32位整数范围内,并且001要成为1解题思路题目简单,各种语言特性不同,各显神通了。代码class Solution(object): def reverse(self, x): """ :type x: int :rtype: int ""&am原创 2017-08-09 05:26:21 · 535 阅读 · 0 评论 -
[Leetcode][python]Binary Tree Level Order Traversal II
题目大意层序输出二叉树,这次是从最下层输出到根节点解题思路只要在Binary Tree Level Order Traversal的基础上加一行反转代码DFS代码请看上面一题,都只要加一行。BFS# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# s原创 2017-07-25 07:02:51 · 785 阅读 · 0 评论 -
[Leetcode][python]Container With Most Water/盛最多水的容器
题目大意利用x轴作底,给出一个数组,两个任意的竖直线段作杯壁,何时盛水最多。解题思路可以直接for循环i,j遍历,那复杂度就是O(n^2)复杂度为O(n)的思想是贪心原理,先从底边最大的情况考虑,计算最大面积后,此时要将底边长度减1,只需要将杯壁较短的那一边移动一个单位距离,得到的解必定优于杯壁较长那边移动的情况。这样保证每次移动都得到的是局部最优解。每次要么左边往右移动,要么右边往左移动。代原创 2017-08-10 00:58:41 · 816 阅读 · 0 评论 -
[Leetcode][python]Balanced Binary Tree/平衡二叉树
题目大意判断一颗二叉树是否是“高度”平衡的。 平衡二叉树的定义是二叉树的任意节点的两颗子树之间的高度差小于等于1。 这实际上是AVL树(维基百科)的定义。解题思路递归判断自身和自身左右子树是否都是平衡的。 而每个循环内判断的依据就是判断树的深度,之前做过的。代码class Solution(object): def maxDepth(self, root): if ro原创 2017-08-03 04:10:38 · 1346 阅读 · 0 评论 -
[Leetcode][python]Minimum Depth of Binary Tree
题目大意求二叉树的最小深度解题思路联想到求最大深度,递归到最深处往上层慢慢+1。代码class Solution(object): def minDepth(self, root): """ :type root: TreeNode :rtype: int """ if root == None:原创 2017-08-03 04:35:53 · 713 阅读 · 0 评论 -
[Leetcode][python]Binary Tree Preorder Traversal/二叉树的前序遍历
题目大意二叉树前序遍历 挑战:迭代解题解题思路递归简单原创 2017-08-03 06:11:58 · 1846 阅读 · 0 评论 -
[Leetcode][python]Binary Tree Postorder Traversal/二叉树的后序遍历
题目大意二叉树后序遍历 挑战:迭代解题解题思路递归简单 迭代依然用栈,思路参考博客 1 / \ 2 3 / \ 4 5使用一个栈。分几个步骤:一,将根节点入栈,并将根节点的孩子入栈,入栈顺序为:先入右孩子,再入左孩子,顺序不能错。因为这样在弹栈时的顺序就是后序遍历的顺序了。如果左孩子还有左孩子或者右孩子,那么继续按先右后左原创 2017-08-03 06:45:42 · 1179 阅读 · 0 评论 -
[Leetcode][python]Binary Tree Inorder Traversal/二叉树的中序遍历
题目大意中序遍历一个二叉树 挑战:不用递归只用迭代做解题思路递归简单 迭代:参考 我们使用一个栈来解决问题。步骤如下:一,我们将根节点1入栈,如果有左孩子,依次入栈,那么入栈顺序为:1,2,4。由于4的左子树为空,停止入栈,此时栈为{1,2,4}。二,此时将4出栈,并遍历4,由于4也没有右孩子,那么根据中序遍历的规则,我们显然应该继续遍历4的父亲2,情况是这样。所以我们继续将2出栈并遍历2,2原创 2017-07-28 05:13:22 · 992 阅读 · 0 评论 -
[Leetcode][python]Convert Sorted Array to Binary Search Tree
题目大意将一个排序好的数组转换为一颗二叉查找树,这颗二叉查找树要求是平衡的。解题思路由于要求二叉查找树是平衡的。所以我们可以选在数组的中间那个数当树根root,然后这个数左边的数组为左子树,右边的数组为右子树,分别递归产生左右子树就可以了。注意:如果是偶数个数的数组,那么答案就有多种可能。这也是为什么我的代码分为奇数偶数判定,而标准答案没用,经过测试,两种代码生成两种不同的答案,并且leetcode原创 2017-07-26 07:11:55 · 1524 阅读 · 0 评论 -
[Leetcode][python]4Sum
题目大意给出数组,找出四个数组合等于target数解题思路双指针用双重循环,比3Sum多循环一重,当然最后还是归结到双指针2Sum问题。hash表来自:博客 需要用到哈希表的思路,这样可以空间换时间,以增加空间复杂度的代价来降低时间复杂度。首先建立一个字典dict,字典的key值为数组中每两个元素的和,每个key对应的value为这两个元素的下标组成的元组,元...原创 2017-08-12 05:40:37 · 1802 阅读 · 0 评论 -
[Leetcode][python]Integer to Roman
题目大意将整数转为罗马数字解题思路来自:博客I = 1; V = 5; X = 10; L = 50; C = 100; D = 500; M = 1000;其中每两个阶段的之间有一个减法的表示,比如900=CM, C写在M前面表示M-C。 范围给到3999,感觉情况不多直接打表其实更快,用代码判断表示估计比较繁琐。 然后就是贪心的做法,每次选择能表示的最大值,把对应的字符串连起来。原创 2017-08-11 01:09:41 · 604 阅读 · 0 评论 -
[Leetcode][python]Roman to Integer/罗马数字转整数
题目大意将罗马数字转为整数解题思路与上一题不同,这一题可以使用dict。来自:Gitbook 根据罗马数字的规则,只有在前面的字母比当前字母小的情况下要执行减法,其他情况只需要把罗马字母对应的数字直接相加即可。如果发现前一个字母比当前字母小,就减去前一个字母,因为错误的把它加入了结果,且在加上当前字母时还要减去前一个字母的值。代码class Solution(object): def ro原创 2017-08-11 01:39:05 · 643 阅读 · 1 评论 -
[Leetcode][python]Longest Common Prefix/最长公共前缀
题目大意寻找一组字符串的公共起始子串解题思路将每个字符串和第一个字符串对比,而且从第一个字母开始遍历,一旦出现某个字符串结束了,或者字母不同,则直接输出第一个字符串的前N个字母代码时间复杂度:O(n*k) k为结果字符串长度 空间复杂度:O(1)class Solution(object): def longestCommonPrefix(self, strs): """原创 2017-08-11 05:05:05 · 732 阅读 · 0 评论 -
[Leetcode][python]Flatten Binary Tree to Linked List/二叉树展开为链表
题目大意把一棵二叉树变为链表(扁平化),也就是一棵所有节点要么没有子节点,要么只有右节点的二叉树。解题思路参考答案代码class Solution(object): def flatten(self, root): """ :type root: TreeNode :rtype: void Do not return anyth原创 2017-08-04 06:10:20 · 1161 阅读 · 0 评论 -
[Leetcode][python]Path Sum/路径总和
题目大意给定一个数和一棵树,求能否有一条路径上所有叶子结点数值加起来等于给定的数解题思路递归代码class Solution(object): def hasPathSum(self, root, sum): """ :type root: TreeNode :type sum: int :rtype: bool原创 2017-08-04 06:33:40 · 1109 阅读 · 0 评论 -
[Leetcode][python]Convert Sorted List to Binary Search Tree
题目大意将一个升序链表转为有序二叉树 和上一题的不同仅仅是将数组换成了链表解题思路首先想到的是将链表存入数组,然后和上一题相同。网上思路是用快慢指针,慢指针每次走一格,快指针每次走两格代码转为数组(街上一题)# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):#原创 2017-07-27 06:30:48 · 1802 阅读 · 0 评论 -
[Leetcode][python]Path Sum II/路径总和 II
题目大意将根到叶子的路径和为sum的路径都枚举出来。解题思路递归,并且用了python函数嵌套,有关函数嵌套可以看这一篇文章其实一开始不想项标准答案一样用函数嵌套,毕竟别的语言可能不支持,以后看答案不方便,但是如果把list_all放在全局,需要每轮都去清空它,而leetcode跑测试的时候应该是一个类的对象跑完所有测试,所以全局变量会累加,只能按照标准答案写了。注意:嵌套的函数不需要再写self原创 2017-08-05 02:27:13 · 1305 阅读 · 0 评论 -
[Leetcode][python]Letter Combinations of a Phone Number/电话号码的字母组合
题目大意输入手机键盘的数字,组合所有可能的字母。解题思路DFS深度优先代码class Solution(object): def letterCombinations(self, digits): """ :type digits: str :rtype: List[str] """ ...原创 2017-08-20 11:47:52 · 1086 阅读 · 0 评论 -
[Leetcode][python]Unique Binary Search Trees/不同的二叉查找树
题目大意给出一个n,求1-n能够得到的所有二叉搜索树解题思路转自博客这题想了好久才想清楚。其实如果把上例的顺序改一下,就可以看出规律了。 比如,以1为根的树有几个,完全取决于有二个元素的子树有几种。同理,2为根的子树取决于一个元素的子树有几个。以3为根的情况,则与1相同。定义Count[i] 为以[0,i]能产生的Unique Binary Tree的数目,如果数...原创 2017-07-29 04:10:07 · 1897 阅读 · 0 评论 -
[Leetcode][python]Generate Parentheses/括号生成
题目大意给定n,生成n对括号,必须正常关闭所有符号解题思路回溯法典型代表代码class Solution(object): def helpler(self, l, r, item, res): if r < l: # print item return if l == 0 and r == 0:原创 2017-08-26 02:02:57 · 766 阅读 · 0 评论 -
[Leetcode][python]Merge Two Sorted Lists/合并两个有序链表
题目大意合并两个排好序的链表解题思路已开始将其当成两个list,去分别修改其值,但其实应该修改的是链表的指针。 并且还有一个值得注意的是dummy node,见总结。 代码class Solution(object): def mergeTwoLists(self, l1, l2): """ :type l1: ListNode :type原创 2017-08-22 23:43:48 · 1307 阅读 · 0 评论