- 博客(17)
- 收藏
- 关注
原创 99.恢复二叉搜索树
二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。示例输入: [1,3,null,null,2] 1 / 3 \ 2输出: [3,1,null,null,2] 3 / 1 \ 2输入: [3,1,4,null,null,2] 3 / \1 4 / 2输出: [2,1,4,null,null,3...
2019-10-21 10:53:34
85
原创 98.验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例输入: 2 / \ 1 3输出: true输入: 5 / \ 1 4 / \ 3 6输出: false解释:...
2019-10-16 11:38:33
93
原创 90.子集Ⅱ
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]解法本题相当于将 78.子集 中的不包含重复元素的约束条件去掉了,所以我们只需在78题基础上完成去重工作即可。去除由数字相同排列导致的重复...
2019-10-09 16:26:13
121
原创 89.格雷编码
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。示例输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的 n,其格雷编码序列并不唯一。例如,[0,2,3,1] 也是一个有效的格雷编码序列。00 - 010 -...
2019-10-09 11:48:56
95
原创 81.搜索旋转排序数组Ⅱ
假设按照升序排序的数组在预先未知的某个点上进行了旋转。例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] 。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例输入: nums = [2,5,6,0,0,1,2], target = 0输出: true输入: nums = [2,5,6,0,0,1,2], ...
2019-09-26 10:20:08
91
原创 80.删除排序数组中的重复项Ⅱ
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。给定 nums = [0,0,1,1,1,...
2019-09-25 17:51:58
80
原创 78.子集
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]解法凡是涉及到数组元素排列组合问题的,均可使用46.全排列中的模板:使用栈储存解,使用列表储存...
2019-09-24 09:49:15
81
原创 77.组合
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]解法思路:回溯法,个人喜欢用栈,操作对象都是新添加(或上一步添加)的元素。判断压入元素是否大于栈顶元素,避免数字的重复使用压入元素,递归进行下一次压入...
2019-09-23 17:09:29
96
转载 76.最小覆盖子串
给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"说明如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。解法滑动窗口在滑动窗口类型的问题中都会有两个指针。一个用于延伸现有窗口的 right ...
2019-09-23 16:34:24
102
原创 71.简化路径
以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必...
2019-09-19 15:18:35
85
原创 70.爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶解法一、回(暴)...
2019-09-18 19:50:17
72
原创 69.x的平方根
实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例输入: 4输出: 2输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。解法典型的二分查找题目,通过比较 mid2 与 x 的大小,来改变左边界或右边界。...
2019-09-18 11:25:01
140
原创 59.螺旋矩阵Ⅱ
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例输入: 3输出:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]解法构造一个 n*n 矩阵 matrix,其元素在赋值前均为 0。将走过的元素设为 num。如果到达边界,则改变方向指针。if (matrix[(i + di) % n][...
2019-09-03 11:34:49
141
原创 54.螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输出: [1,2,3,4,8,...
2019-08-29 15:01:48
110
原创 51.N皇后
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例输入: 4输出: [ [".Q..", // 解法 1 "...Q", "Q.....
2019-08-28 11:53:55
159
原创 48.旋转图像
给定一个 n × n 的二维矩阵表示一个图像,将图像顺时针旋转 90 度。说明你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]给定 matr...
2019-08-26 16:49:07
71
原创 46.全排列
给定一个没有重复数字的序列,返回其所有可能的全排列。示例输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解法思路:回溯法,个人喜欢用栈,操作对象都是新添加(或上一步添加)的元素。压入元素前先判断栈中是否存在该元素,避免数字的重复使用压入元素,递归进行下一次压入当...
2019-08-23 19:35:25
106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人