
LeetCode解题笔记
JohnLiu_
这个作者很懒,什么都没留下…
展开
-
LeetCode解题笔记 49 —— 403. 字典序排数
题目一只青蛙想要过河。 假定河流被等分为x个单元格,并且在每一个单元格内都有可能放有一石子(也有可能没有)。 青蛙可以跳上石头,但是不可以跳入水中。给定石子的位置列表(用单元格序号升序表示),请判定青蛙能否成功过河(即能否在最后一步跳至最后一个石子上)。开始时,青蛙默认已站在第一个石子上,并可以假定它第一步只能跳跃一个单位(即只能从单元格1跳至单元格2)。如果青蛙上一步跳跃了...原创 2019-06-18 11:20:21 · 437 阅读 · 0 评论 -
LeetCode解题笔记 48 —— 386. 字典序排数
题目给定一个整数n, 返回从1到n的字典顺序。例如,给定n=1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据n小于等于5,000,000。解法class Solution { public List<Integer> lexicalOrde...原创 2019-05-29 14:56:31 · 238 阅读 · 0 评论 -
LeetCode解题笔记 47 —— 373. 查找和最小的K对数字
题目给定两个以升序排列的整形数组nums1和nums2, 以及一个整数k。定义一对值(u,v),其中第一个元素来自nums1,第二个元素来自nums2。找到和最小的 k 对数字(u1,v1), (u2,v2) ... (uk,vk)。示例 1:输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3输出: [1,2],[1,4...原创 2019-05-23 13:36:32 · 781 阅读 · 0 评论 -
LeetCode解题笔记 46 —— 368. 最大整除子集
题目给出一个由无重复的正整数组成的集合,找出其中最大的整除子集,子集中任意一对 (Si,Sj) 都要满足:Si% Sj= 0 或 Sj% Si= 0。如果有多个目标子集,返回其中任何一个均可。示例 1:输入: [1,2,3]输出: [1,2] (当然, [1,3] 也正确)示例 2:输入: [1,2,4,8]输出: [1,2,4,8]解法...原创 2019-05-22 10:00:51 · 392 阅读 · 0 评论 -
LeetCode解题笔记 45 —— 352. 将数据流变为多个不相交区间
题目给定一个非负整数的数据流输入 a1,a2,…,an,…,将到目前为止看到的数字总结为不相交的区间列表。例如,假设数据流中的整数为 1,3,7,2,6,…,每次的总结为:[1, 1][1, 1], [3, 3][1, 1], [3, 3], [7, 7][1, 3], [7, 7][1, 3], [6, 7]进阶:如果有很多合并,并且与数据流的大小相比,不相交...原创 2019-05-21 13:43:10 · 409 阅读 · 0 评论 -
LeetCode解题笔记 44 —— 338. 比特位计数
题目给定一个非负整数num。对于0 ≤ i ≤ num范围中的每个数字i,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例2:输入: 5输出: [0,1,1,2,1,2]解法class Solution { public int[] countBits(int num) { ...原创 2019-05-20 17:41:51 · 361 阅读 · 0 评论 -
LeetCode解题笔记 43 —— 327. 区间和的个数
题目给定一个整数数组nums,返回区间和在[lower, upper]之间的个数,包含lower和upper。区间和S(i, j)表示在nums中,位置从i到j的元素之和,包含i和j(i≤j)。说明:最直观的算法复杂度是O(n2) ,请在此基础上优化你的算法。示例:输入: nums = [-2,5,-1], lower = -2, u...原创 2019-05-17 15:26:02 · 682 阅读 · 0 评论 -
LeetCode解题笔记 42 —— 297. 二叉树的序列化与反序列化
题目序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例:你可以将以下二叉树...原创 2019-05-10 10:16:47 · 268 阅读 · 0 评论 -
LeetCode解题笔记 41 —— 279. 完全平方数
题目给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于n。你需要让组成和的完全平方数的个数最少。示例1:输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.解法class Solution { public ...原创 2019-05-09 13:47:25 · 270 阅读 · 0 评论 -
LeetCode解题笔记 40 —— 273. 整数转换英文表示
题目将非负整数转换为其对应的英文表示。可以保证给定输入小于2^31- 1 。示例 1:输入: 123输出: "One Hundred Twenty Three"示例 2:输入: 12345输出: "Twelve Thousand Three Hundred Forty Five"示例 3:输入: 1234567输出: "One Million Two ...原创 2019-05-09 09:40:57 · 418 阅读 · 0 评论 -
LeetCode解题笔记 39 —— 239. 滑动窗口最大值
题目给定一个数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口k内的数字。滑动窗口每次只向右移动一位。返回滑动窗口最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值------...原创 2019-05-08 11:25:46 · 197 阅读 · 0 评论 -
LeetCode解题笔记 38 —— 233.数字 1 的个数
题目给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。示例:输入: 13输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。解法class Solution { //以下注释以n=5683为例 public int countDigitOne(int n) { if(n&l...原创 2019-05-08 09:40:22 · 537 阅读 · 0 评论 -
LeetCode解题笔记 37 —— 224. 基本计算器
题目实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式可以包含左括号(,右括号),加号+,减号-,非负整数和空格。示例 1:输入: "1 + 1"输出: 2示例 2:输入: " 2-1 + 2 "输出: 3示例 3:输入: "(1+(4+5+2)-3)+(6+8)"输出: 23说明:你可以假设所给定的表达式都是有...原创 2019-05-07 15:20:11 · 659 阅读 · 0 评论 -
LeetCode解题笔记 36 —— 214. 最短回文串
题目给定一个字符串s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。示例1:输入: "aacecaaa"输出: "aaacecaaa"示例 2:输入: "abcd"输出: "dcbabcd"解法class Solution { public String shortestPalindrome(Strin...原创 2019-05-06 17:11:19 · 497 阅读 · 1 评论 -
LeetCode解题笔记 35 —— 213. 打家劫舍 II
题目你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例1:输入: [2,3,2]输出: 3...原创 2019-05-06 15:59:24 · 172 阅读 · 0 评论 -
LeetCode解题笔记 34 —— 188. 买卖股票的最佳时机 IV
题目给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成k笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入: [2,4,1], k = 2输出: 2解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔...原创 2019-04-30 15:05:02 · 299 阅读 · 0 评论 -
LeetCode解题笔记 33 —— 165. 比较版本号
题目比较两个版本号version1和version2。如果version1>version2返回1,如果version1<version2返回-1, 除此之外返回0。你可以假设版本字符串非空,并且只包含数字和.字符。.字符不代表小数点,而是用于分隔数字序列。例如,2.5不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版...原创 2019-04-30 15:02:15 · 235 阅读 · 0 评论 -
LeetCode解题笔记 32 —— 135. 分发糖果
题目老师想给孩子们分发糖果,有N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。 相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例1:输入: [1,0,2]输出: 5解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。...原创 2019-04-26 11:33:27 · 333 阅读 · 1 评论 -
LeetCode解题笔记 31 —— 133. 克隆图
题目给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值val(Int) 和其邻居的列表(list[Node])。示例:输入:{"$id":"1","neighbors":[{"$id":"2","neighbors":[{"$ref":"1"},{"$id":"3","neighbors":[{"$ref":"2"},{"$id":"4","...原创 2019-04-25 18:01:30 · 356 阅读 · 0 评论 -
LeetCode解题笔记 30 —— 124. 二叉树中的最大路径和
题目给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例2:输入: [-10,9,20,null,null,15,7] -10 / \ 9 2...原创 2019-04-23 11:49:28 · 286 阅读 · 0 评论 -
LeetCode解题笔记 29 —— 123. 买卖股票的最佳时机 III
题目给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交...原创 2019-04-23 10:36:03 · 259 阅读 · 0 评论 -
LeetCode解题笔记 28 —— 105.从前序与中序遍历序列构造二叉树
题目根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解法/** * Definition for a...原创 2019-04-19 15:21:11 · 154 阅读 · 0 评论 -
LeetCode解题笔记 27 —— 102. 二叉树的层次遍历
题目给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]解法/** * Definition for ...原创 2019-04-19 14:10:30 · 198 阅读 · 0 评论 -
LeetCode解题笔记 26 —— 100. 相同的树
题目给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: ...原创 2019-04-19 11:13:56 · 180 阅读 · 0 评论 -
LeetCode解题笔记 25 —— 98. 验证二叉搜索树
题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例1:输入: 2 / \ 1 3输出: true示例2:输入: 5 / \ 1 4 / \ ...原创 2019-04-18 15:55:27 · 322 阅读 · 0 评论 -
LeetCode解题笔记 24 —— 95. 不同的二叉搜索树 II
题目给定一个整数n,生成所有由 1 ...n为节点所组成的二叉搜索树。【二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。】示例:输入...原创 2019-04-18 15:00:49 · 296 阅读 · 0 评论 -
LeetCode解题笔记 23 —— 94. 二叉树的中序遍历
题目给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]解法/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left...原创 2019-04-18 10:41:02 · 205 阅读 · 0 评论 -
LeetCode解题笔记 22 —— 93. 复原IP地址
题目给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: "25525511135"输出: ["255.255.11.135", "255.255.111.35"]解法class Solution { public List<String> restoreIpAddresses(String s) { ...原创 2019-04-18 10:23:29 · 1143 阅读 · 0 评论 -
LeetCode解题笔记 21 —— 89. 格雷编码
题目格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数n,打印其格雷编码序列。格雷编码序列必须以 0 开头。示例 1:输入:2输出:[0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的n,其格雷编码序列并不唯一。例如,[0,2,3,1]也是一个有效的格雷编码序列。...原创 2019-04-17 16:51:49 · 156 阅读 · 0 评论 -
LeetCode解题笔记 20 —— 85. 最大矩形
题目给定一个仅包含0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"]]输出: 6解法引用了第84题柱状图中最大的矩形的解法 Le...原创 2019-04-16 17:29:06 · 324 阅读 · 0 评论 -
LeetCode解题笔记 19 —— 84. 柱状图中最大的矩形
题目给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为10个单位。示例:输入: [2,1,5,6,2,3]输出: 10解法...原创 2019-04-16 12:01:20 · 215 阅读 · 0 评论 -
LeetCode解题笔记 18 —— 78. 子集
题目给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]解法class Solution { public List<...原创 2019-04-15 11:59:34 · 196 阅读 · 0 评论 -
LeetCode解题笔记 17 —— 68. 文本左右对齐
题目给定一个单词数组和一个长度maxWidth,重新排版单词,使其成为每行恰好有maxWidth个字符,且左右两端对齐的文本。你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格' '填充,使得每行恰好有maxWidth个字符。要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格...原创 2019-04-09 17:59:40 · 211 阅读 · 0 评论 -
LeetCode解题笔记 16 —— 62. 不同路径
题目一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m和n的值均不超过 100。示例1:输入: m = 3, n = 2输出: 3...原创 2019-04-09 15:35:38 · 247 阅读 · 0 评论 -
LeetCode解题笔记 15 —— 60. 第k个排列
题目给出集合[1,2,3,…,n],其所有元素共有n! 种排列。按大小顺序列出所有排列情况,并一一标记,当n= 3 时, 所有排列如下:"123" "132" "213" "231" "312" "321"给定n和k,返回第k个排列。说明:给定n的范围是 [1, 9]。 给定k的范围是[1, n!]。示例1:输入: n = 3...原创 2019-04-09 10:32:27 · 190 阅读 · 0 评论 -
LeetCode解题笔记 14 —— 59. 螺旋矩阵 II
题目给定一个正整数n,生成一个包含 1 到n2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]解法class Solution { public int[][] generateMatrix(int n) { int[][] nu...原创 2019-04-08 18:09:27 · 229 阅读 · 0 评论 -
LeetCode解题笔记 13 —— 54. 螺旋矩阵
题目给定一个包含mxn个元素的矩阵(m行,n列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12...原创 2019-04-08 15:12:13 · 208 阅读 · 0 评论 -
LeetCode解题笔记 12 —— 51. N皇后
问题n皇后问题研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数n,返回所有不同的n皇后问题的解决方案。每一种解法包含一个明确的n皇后问题的棋子放置方案,该方案中'Q'和'.'分别代表了皇后和空位。示例:输入: 4输出: [ [".Q..", // 解法 1 "...原创 2019-04-08 11:50:37 · 214 阅读 · 0 评论 -
LeetCode解题笔记 11 —— 49.字母异位词分组
题目给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明:所有输入均为小写字母。 不考虑答案输出的顺序。解法cla...原创 2019-04-08 10:13:27 · 214 阅读 · 0 评论 -
LeetCode解题笔记 10 —— 48. 旋转图像
题目给定一个n×n的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9...原创 2019-04-08 09:24:24 · 154 阅读 · 0 评论