算法
永不止步的蜗牛
愿我之所行,皆成之以事!
展开
-
131. 分割回文串
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出:[[“aa”,“b”],[“a”,“a”,“b”]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-partitioning著作权归领扣网络所有。商业转载请联系官方授权,非商业...原创 2019-10-22 14:46:19 · 233 阅读 · 0 评论 -
79. 单词搜索
给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 true...原创 2019-02-26 17:06:22 · 139 阅读 · 0 评论 -
78. 子集
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]](1)方法:遍历法思路:先添加一个空链表到结果集中,然后遍历数组将每个数字都依次添加到结果集中当前子集,生成新的子集添加到结果集。...原创 2019-02-25 10:24:53 · 151 阅读 · 0 评论 -
81. 搜索旋转排序数组 II
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [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:输入: nums = [2,5,6...原创 2019-02-28 14:31:34 · 141 阅读 · 0 评论 -
80. 删除排序数组中的重复项 II
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中超出新长度后面的元素...原创 2019-02-28 14:08:13 · 96 阅读 · 0 评论 -
74. 搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 50]]target = 3输出: true示例 2:输入:matrix = [...原创 2019-02-19 10:35:28 · 175 阅读 · 0 评论 -
77. 组合
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]方法:递归,回溯思路:从n个数里面取k个数的组合,先锁定第一个数,然后从剩下数中锁定第二个,依次类推直到拿到k个数,然后开始回溯,改变第K个数,拿到第k个数的所有可能,然后依次回溯...原创 2019-02-22 13:58:34 · 152 阅读 · 0 评论 -
LeetCode 70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶...原创 2019-01-22 10:19:03 · 148 阅读 · 0 评论 -
加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。(1)遍历法...原创 2019-01-08 14:38:07 · 98 阅读 · 0 评论 -
最小路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。(1)动态规划1,要明白上边界线的点只能由它的上一个点向右移动所得,而左边界线的点只能从由它的上一个点向下移动所得;2,...原创 2019-01-07 14:54:47 · 137 阅读 · 0 评论 -
不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总...原创 2019-01-02 16:33:46 · 109 阅读 · 0 评论 -
二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1”输出: “100”示例 2:输入: a = “1010”, b = “1011”输出: “10101”(1)使用jdk进制转化1,第一时间想到使用jdk自带方法,将给定的二进制数转化为十进制;2,然后相加,然后将和重新转化为二进制即可...原创 2019-01-10 15:07:48 · 3368 阅读 · 0 评论 -
跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最...原创 2018-12-06 14:50:03 · 133 阅读 · 0 评论 -
最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。方法一:双指针穷举法思路:要找到最大和的连续数组,那么就将所有可能的和都拿到,取到最大的即可;弊端:因为每次都要从开始计算和,需要时间过长,编译不通过...原创 2018-12-05 16:39:10 · 120 阅读 · 0 评论 -
螺旋矩阵
给定一个包含 m x n 个元素的矩阵(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]]输出: [1,2,3,4,8,1...原创 2018-12-05 16:26:19 · 1551 阅读 · 0 评论 -
75. 颜色分类
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。首先,迭代计...原创 2019-02-20 10:59:09 · 142 阅读 · 0 评论 -
84. 柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10方法:双指针滑动窗口思路:从头遍历数组,求...原创 2019-03-05 15:31:26 · 406 阅读 · 0 评论 -
127. 单词接龙
给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endW...原创 2019-10-11 16:01:27 · 336 阅读 · 0 评论 -
125. 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/prob...原创 2019-10-09 14:16:56 · 157 阅读 · 0 评论 -
二叉树中的最大路径和
给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7输出: ...原创 2019-10-08 14:12:58 · 499 阅读 · 0 评论 -
93. 复原IP地址
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: “25525511135”输出: [“255.255.11.135”, “255.255.111.35”]方法:穷举法思路:总共四个片段,一个片段一个片段的取,拿到所有可能,找出其中的正确解;注意:0不能开头,只能跟在数字的后边;并且确保字符串全部分成了四段,成功加入结果集,不成功则返回继续遍历;cla...原创 2019-03-18 15:54:23 · 326 阅读 · 0 评论 -
89. 格雷编码
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。示例 1:输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的 n,其格雷编码序列并不唯一。例如,[0,2,3,1] 也是一个有效的格雷编码序列。00 - 010...原创 2019-03-13 14:29:15 · 187 阅读 · 0 评论 -
88. 合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2...原创 2019-03-11 10:33:16 · 195 阅读 · 0 评论 -
94. 二叉树的中序遍历
给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]中序遍历:二叉树遍历中,先遍历左子树,然后访问根节点,然后遍历右子树;方法:递归思路:每一个二叉树,都是由无数个子二叉树构成,从根节点开始递归,一直取左节点对应的二叉树,直到这个节点没有左分支,将这个值存入结果集,然后回溯到当前子二叉树的根节点,并且将这个值存入结果集,然后...原创 2019-03-19 15:30:53 · 430 阅读 · 0 评论 -
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方法:按层分割法思路:按层生成从头部开始,生成每一层的柱状图,然后求得改层的所能达到的最大...原创 2019-03-07 14:49:06 · 1139 阅读 · 0 评论 -
86. 分隔链表
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5方法:遍历法思路:定义两个新链表,head链表逐个开头遍历,大于等于...原创 2019-03-07 14:36:15 · 107 阅读 · 0 评论 -
90. 子集 II
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[]](1)遍历添加法,参考子集;思路:每一个新子集都是当前已有子集加上当前遍历数字即可,因为有重复所以先对数组排序,并且对链表添加进行去重处理;弊端:每一次都要判断是...原创 2019-03-14 15:13:29 · 171 阅读 · 0 评论 -
83. 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3方法:递归思路:和上一题思路一样 删除排序链表中的重复元素II,只是重复的不全跳过而是保留一个即可;例如1->1->2,判断1和它后面的值相...原创 2019-03-04 13:59:05 · 105 阅读 · 0 评论 -
删除排序链表中的重复元素 II
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3(1)方法:递归思路:重复的直接跳过,继续判断后续,不重复唯一则保留即可;例如1...原创 2019-03-04 13:54:59 · 1143 阅读 · 0 评论 -
76. 最小覆盖子串
给定一个字符串 S 和一个字符串 T,请在 S 中找出包含 T 所有字母的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 ""。如果 S 中存在这样的子串,我们保证它是唯一的答案。方法:滑动窗口法原理:就是用左右指针l和r在s上面滑动,找到所有的解,然后不断更新记录最小长度的...原创 2019-02-21 11:32:07 · 494 阅读 · 0 评论 -
全排列 II
给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]参考全排列在全排列I的基础上加判断当前操作元素是否前面已经存在重复即可,不存在在执行换位操作,存在跳过即可;class Solution { public List<List<Integer>> permut...原创 2018-11-19 16:57:31 · 200 阅读 · 0 评论 -
全排列
给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]](1)方法:字典法思路:(1)拿到全部排序,并且按照字典顺序;(2)现将数组排序,然后判断是否右下一个排列,参考下一个排列(3)循环拿到所有的排列组合,直到没有下一个排列,也就是排列...原创 2018-11-19 16:23:35 · 120 阅读 · 0 评论 -
Pow(x, n)
实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 32 位有...原创 2018-11-22 14:20:14 · 7751 阅读 · 0 评论 -
两数相除
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。示例 1:输入: dividend = 10, divisor = 3输出: 3示例 2:输入: dividend = 7, divisor = -3输出: -2说明:被除数和除数均为 32 位有符号...原创 2018-10-17 10:06:05 · 11201 阅读 · 2 评论 -
两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。方法:两两换位法思路:1,先换1,2的位置然后换3,4的位置,直至所有2,假设1->2->3->4,...原创 2018-10-10 11:00:41 · 365 阅读 · 0 评论 -
合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6方法:累加法思路:1,k个相加其实简化就是两两相加,将数组前两个相加,再逐一往后相加即可;2,具体思路还是两个链表合并,参考合...原创 2018-10-09 15:57:22 · 913 阅读 · 1 评论 -
合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4方法:遍历法思路:1,需要对两个有序链表有序连接起来,那肯定需要把两个链表挨个遍历2,定义一个结果临时头结点,遍历两个链表,比较值,临时头结点就指向这个小值,...原创 2018-09-30 14:41:49 · 339 阅读 · 0 评论 -
两数相加
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807(1)方法:逐位相加法思路:1,遍历两个链...原创 2018-09-30 14:38:50 · 125 阅读 · 0 评论 -
括号生成
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”](1)暴力法:(参考答案)原理:1,其实就是列出所有括号的组合,只能有6个半括号;2,核心思想是双递归,双递归可以保证拿到所有可能的半括号组合,并且没有重复,...原创 2018-10-09 11:35:55 · 1773 阅读 · 0 评论 -
有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)...原创 2018-09-30 10:30:54 · 145 阅读 · 0 评论