- 博客(126)
- 收藏
- 关注
原创 96.不同的二叉搜索树
题目:给定一个整数 n,求以1 ...n为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 ...
2020-02-26 13:35:29
155
原创 95.不同的二叉搜索树
题目:给定一个整数 n,生成所有由 1 ...n 为节点所组成的二叉搜索树。示例:输入: 3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 3 ...
2020-02-21 13:28:37
114
原创 二叉树的中序遍历
题目:思路:利用栈做迭代:先遍历所有节点,直到找到最左节点,将这个节点的父节点抛出,加入栈,再遍历右子树.代码:class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: ans,res=[],[] while ans or root: ...
2020-02-19 20:50:43
147
原创 93.复原IP地址
题目:思路:递归IP地址每个点相隔之间,只能有3种情况,只有一个,或者有2个,或者3个但是小于256.集合所有情况即可代码:class Solution: def restoreIpAddresses(self, s: str) -> List[str]: ans=[] def Restore(start,n,item):...
2020-02-18 21:05:34
109
原创 92.翻转链表
题目:思路:遍历链表,直到m位置,记录为新的头节点,即将开始翻转.新增一个pre节点,每遍历一个m到n之间的节点,就将它提到头节点的前面.代码:class Solution: def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode: if not head: ...
2020-02-17 23:17:19
82
原创 91.解码方法
题目:思路:其实可以转化成对字符串进行有效分割,判断当前元素是否可以和前一个元素组合.代码:class Solution: def numDecodings(self, s: str) -> int: if s=="": return 0 ans=[1]+[0]*(len(s)) s=...
2020-02-16 19:51:00
202
原创 90,子集二
题目:思路:和第78题思路差不多,但是要注意一个部分去重问题.部分去重即保证重复元素的之前那些子集不再和新元素进行组合.直接搬答题区大佬的解释吧: 为什么会出现重复子列? 该解法生成子列是在之前已经生成的所有子列上依次加上新的元素,生成新的子列。 如果元素列(nums)中存在重复元素,则当前元素生成新子列的过程会与前面重复元素生成新子列的过程部分重复,则生成的子列也是...
2020-02-15 22:12:51
103
原创 89.格雷编码
题目:格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。示例 1:输入:2输出:[0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的n,其格雷编码序列并不唯一。例如,[0,2,3,1]也是一个有效的格雷编码序列。...
2020-02-14 10:31:23
75
原创 88.合并两个有序数组
题目:思路:题目给出了数组长度,直接遍历数组1和数组2从尾开始加入数组,谁更大就加入数组尾部,直到所有元素加入.代码:class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: """ Do not r...
2020-02-13 13:16:08
76
原创 87.扰乱字符串
题目:给定一个字符串s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树。下图是字符串s1="great"的一种可能的表示形式。 great / \ gr eat/ \ / \g r e at / \ a t在扰乱这个字符串的过程中,我们可以挑选任何一个非叶节点...
2020-02-13 11:30:46
152
原创 86.分隔链表
题目:思路:比X大的元素存一个链表,比X小的存一个链表.然后把小的链表放在大的链表前面代码:# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass ...
2020-02-10 22:40:01
65
原创 85.最大矩形
题目:思路:这一题的算法本质上和84题Largest Rectangle in Histogram一样,对每一行都求出每个元素对应的高度,这个高度就是对应的连续1的长度,然后对每一行都更新一次最大矩形面积。那么这个问题就变成了Largest Rectangle in Histogram。本质上是对矩阵中的每行,均依次执行84题算法。代码:class Solution: ...
2020-02-08 17:17:37
119
原创 84.柱状图中最大的矩形
题目:思路:首先寻找第i 个位置的最大面积:计算方法:向左找第一个小于i高度的位置记录为left,向右找第一个小于i高度的位置记录为right.面积公式=heights[i]*(right-left-1)每次更新最大面积优化:利用单调递增的栈来寻找最大面积代码: def largestRectangleArea(self, heights: L...
2020-02-03 17:13:31
70
原创 83.删除排序数组中的重复项2
题目:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates...
2019-12-27 13:10:00
67
原创 82.删除排序链表中的重复元素
题目:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。示例1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例2:输入: 1->1->1->2->3输出: 2->3来源:力扣(LeetCode)链接:https://leetco...
2019-12-26 13:26:20
116
原创 81.搜索旋转排序数组
题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,0,1,2,2,5,6]可能变为[2,5,6,0,0,1,2])。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回true,否则返回false。示例1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例2:输入: num...
2019-12-24 15:24:25
97
原创 80.删除排序数组中的重复项
题目:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中...
2019-12-23 10:14:42
87
原创 79.单词搜索
题目:给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = "A...
2019-12-23 09:36:16
89
原创 78.子集
题目:给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]思路:每从nums数组中遍历一个元素,就加入之前的子集,一直到遍历完代码:...
2019-12-19 18:20:29
82
原创 组合
题目:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。示例:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combinations著作权归...
2019-12-16 15:02:52
109
原创 最小覆盖子串
题目:给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"说明:如果 S 中不存这样的子串,则返回空字符串 ""。如果 S 中存在这样的子串,我们保证它是唯一的答案。来源:力扣(LeetCode)链接:https://leetcode-c...
2019-12-11 17:29:48
88
原创 颜色分类
题目:给定一个包含红色、白色和蓝色,一共n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描...
2019-12-10 19:20:56
113
原创 74.搜索二维矩阵
题目:编写一个高效的算法来判断m x n矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例1:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3输出: true示例2:输...
2019-12-01 16:56:16
67
原创 73.矩阵置零
题目:给定一个m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例1:输入:[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例2:输入:[[0,1,2,0],[3,4,5,2],[1,3,1,5]...
2019-11-26 12:10:28
317
1
原创 72.编辑距离
题目:给定两个单词word1 和word2,计算出将word1转换成word2 所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例1:输入: word1 = "horse", word2 = "ros"输出: 3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> r...
2019-11-22 14:43:50
65
原创 71.简化路径
题目:以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..)表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之...
2019-11-18 15:58:47
81
原创 70.爬楼梯
题目:假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2....
2019-11-15 20:11:12
60
原创 69.X的平方根
题目:实现int sqrt(int x)函数。计算并返回x的平方根,其中x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。来源:力扣(LeetCode)链接:https...
2019-11-14 16:49:53
109
原创 文本左右对齐Python
题目:给定一个单词数组和一个长度maxWidth,重新排版单词,使其成为每行恰好有maxWidth个字符,且左右两端对齐的文本。你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格' '填充,使得每行恰好有 maxWidth个字符。要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空...
2019-11-12 16:15:48
1358
原创 67.二进制求和
题目:给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字1和0。示例1:输入: a = "11", b = "1"输出: "100"示例2:输入: a = "1010", b = "1011"输出: "10101"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-bi...
2019-11-06 16:43:43
71
原创 66.加一
题目:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 432...
2019-11-05 10:39:29
54
原创 65有效数字
题目:验证给定的字符串是否可以解释为十进制数字。例如:"0"=>true" 0.1 "=>true"abc"=>false"1 a"=>false"2e10"=>true" -90e3"=>true" 1e"=>false"e3"=>false" 6e-1"=>true" ...
2019-11-04 16:59:26
221
原创 63.最小路径和
题目:给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。来源:力扣(LeetCode)链接:https://leetcode-cn.com/...
2019-11-03 14:36:27
57
原创 63.不同路径二
题目:思路:在原先排列组合的基础上,将有障碍的路线去除。代码:class Solution(object): def uniquePathsWithObstacles(self, obstacleGrid): """ :type obstacleGrid: List[List[int]] :rtype: int ...
2019-11-02 15:27:58
50
原创 62.不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-paths著作权归领扣网络所有。商业转载请联系官方授...
2019-11-01 18:01:52
67
原创 61.旋转链表
题目:给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。示例1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4-...
2019-10-31 17:00:42
54
原创 59.螺旋矩阵二 Python
题目:给定一个正整数n,生成一个包含 1 到n平方所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/spiral-matrix-ii著作权归领扣网络所有。商业...
2019-10-29 16:59:08
203
原创 57.插入区间
题目:给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例1:输入: intervals = [[1,3],[6,9]], newInterval = [2,5]输出: [[1,5],[6,9]]示例2:输入: intervals = [[1,2],[3,5],[6,7...
2019-10-26 20:51:26
103
原创 56.合并区间 python
题目:给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间...
2019-10-25 10:22:35
205
原创 55.跳跃游戏二
题目:给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例2:输入: [3,2,1,0,4]输出: false解释: ...
2019-10-24 09:57:48
153
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人