![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode随手
做人要有比数
Stay foolish, Stay hungry.
展开
-
LeetCode 51,52 N皇后问题
目录问题解析代码问题N皇后问题是典型的回溯法问题,大学算法课上一般都会讲。问题大致意思如下,国际象棋中有一个棋子叫皇后,皇后可以攻击和她同处一行、一列、对角线的其它棋子,加入给定一个棋盘N*N,如何摆放N个皇后使得她们之间不能相互攻击。LeetCode 51需要返回所有可能的棋子摆放,而52只需要返回有多少种可能即可。解析大框架知道了,前面的文章已经介绍了回溯法的基本框架: public void backtrack(List<Integer> list, int i, int n原创 2020-09-09 15:15:37 · 223 阅读 · 0 评论 -
LeetCode 139,140 单词拆分
目录原创 2020-08-25 21:39:05 · 202 阅读 · 0 评论 -
LeetCode技巧篇(三)双指针中的快慢指针
介绍实例总结原创 2020-07-15 20:39:11 · 234 阅读 · 0 评论 -
LeetCode技巧篇(二)Two points for Sliding Window 滑动窗口中的双指针
介绍实例总结原创 2020-06-26 17:05:40 · 285 阅读 · 0 评论 -
LeetCode 1011. Capacity To Ship Packages Within D Days
问题要将传送带上的物品在D天内送到目的地。给定一个整形数组weights,每一个元素weights[i]表示第i个物品的重量。现在要求得能在D天内运送货物的船的最小承重。实例:输入: weights = [1,2,3,4,5,6,7,8,9,10], D = 5输出: 15解释: A ship capacity of 15 is the minimum to ship all the packages in 5 days like this:1st day: 1, 2, 3, 4, 52nd原创 2020-06-02 14:38:09 · 214 阅读 · 0 评论 -
LeetCode技巧篇(一)prefix sum 前缀和
介绍前缀和(prefix sum)是算法题中比较实用的一种技巧,当算法题的背景是整数型数组且出现 “子数组和” 或者 **“连续的子数组”**既可以考虑使用前缀和来求解会得到不错的效果。假设给定的数组A各个元素分别为:那么我们可以得到一个前缀和数组B,通过累加A[0:i-1]得到B[i]:在实现上,可以直接在数组B的基础上累加即可,不需要遍历一遍A。实例现在看一道简单的应用,LeetCode 560. Subarray Sum Equals K。题目很简单,找到连续子数组和为K的子数组个数。原创 2020-05-29 12:52:45 · 7571 阅读 · 0 评论 -
LeetCode 1010. Pairs of Songs With Total Durations Divisible by 60
问题在歌曲列表中,第i首歌有一个持续time[i]秒。返回歌曲总时长(秒)可被60整除的歌曲对数。即返回能使time[i]+time[j]能被60整除的i,j对数。输入: [30,20,150,100,40]输出: 3解释: 有三对i,j使得歌曲持续时间之和能被60整除:(time[0] = 30, time[2] = 150): total duration 180(time[1] = 20, time[3] = 100): total duration 120(time[1] = 20,原创 2020-05-27 10:39:13 · 206 阅读 · 0 评论 -
LeetCode 842 Split Array into Fibonacci Sequence
问题将字符串分割出形如斐波那契数列的字符串数组。给定一个数字串S,例如S =“123456579”,我们可以将它分割成一个类似于斐波那契的序列[123,456,579]。满足三个条件:1,长度必须大于3;2、每一个元素的值必须是整数范围内;3、满足斐波那契数列的性质解析这是典型的回溯法解决的问题。首先从1出发,然后假设第2个数字是2,那么继续往下判断;当无法构成斐波那契数列时,就回溯到原来位置,变成23…。然后接着改变第一个位置1,以此类推,直到最后所有的字符切分后能构成一个满足要求的数组。Jav原创 2020-05-26 21:26:15 · 125 阅读 · 0 评论 -
LeetCode 105, 106, 889 Construct Binary Tree from two traversal orders
问题已知二叉树的两种遍历顺序(先序,中序,后序),构造完整的二叉树。三道题分别是LeetCode 105,LeetCode 106,LeetCode 889。分析先看看三种遍历顺序有哪些特点:先序遍历:[根节点,左子树,右子树],然后每个左子树或者右子树又可以递归的继续划分中序遍历:[左子树,根节点,右子树],然后每个左子树或者右子树又可以递归的继续划分后序遍历:[左子树,右子树,根节点],然后每个左子树或者右子树又可以递归的继续划分那么问题就可以划分为先根据两种遍历顺序来确定根节点位置:原创 2020-05-11 13:48:52 · 126 阅读 · 0 评论 -
LeetCode 60. Permutation Sequence 简洁高效的解法
问题集合[1,2,3……,n]共包含n!不同的排列,把他们从小到大排序可以得到:"123""132""213""231""312""321"现在给定nnn和kkk,找到第kkk个全排列。解析回溯是解决全排列问题的最最最通用的解法,当然,同样适用于该问题。但是用回溯解决该问题复杂度实在太高,而且这里不需要求得所有的全排列,只需要求第kkk个全排列,所以我们可以转变一下思路。我们...原创 2020-04-29 01:05:21 · 211 阅读 · 0 评论 -
LeetCode 246 & 313 丑数
问题找到第n个超级丑数。超级丑数是正数,且它的所有质因数都在给定的质数列表中。246是313的特殊情况,即指定质因子的个数和值。第一个丑数是1。输入: n = 12, primes = [2,7,13,19]输出: 32 解释: [1,2,4,7,8,13,14,16,19,26,28,32] 是给定大小为4的质数数组 [2,7,13,19]的前12个丑数序列.解析一种最直观的解法...原创 2020-04-11 15:28:15 · 139 阅读 · 0 评论 -
LeetCode 93 Restore IP Addresses 递归和非递归解法
问题给定一个只包含数字的字符串,返回所有有效IP地址的组合。输入:"25525511135"输出:["255.255.11.135", "255.255.111.35"]解析首先字符串只可能切成四份,每一份都必须是有效的IP段位,即0~255。第一种解法,暴力求解,三重循环:第一层循环判断第一个段位是否有效且后续字符串的长度是否大于9(后续三个段位长度最大就是9),是进行下一次循环;后...原创 2020-04-01 15:57:31 · 271 阅读 · 0 评论 -
LeetCode 90. Subsets II 非回溯解法
问题给定一个数组,找到所有的真子集。要求,不能重复。输入:[1,2,2]输出:[[],[1],[2],[1,2],[2,2],[1,2,2]]解析显然对于求子集、全排列问题,第一眼想到的解法是回溯。但是,对于这类求子集的问题还有一种更加直观明了的解法。首先,list集合中只有一个空数组[],然后遍历数组,给list集合中每个数组添加当前位置的数并添加回list集合中,于是list集合中...原创 2020-03-31 11:25:13 · 125 阅读 · 0 评论 -
LeetCode Combination Sum I,II,III,IV
介绍LeetCode300题小目标达成这是一类问题,都可以用backtrack(回溯法)来求,这里放在一起比较一下异同。首先是Combination Sum I,问题:给定一个int数组,不包含重复数字,现在需要从里面可重复地取出一些数使得它们的和为target,返回所有不同的取法。这里可以从两个角度考虑:1.每次往arr里面添加数据,比如添加1,那么剩下的就是在数据集中找到和为target-...原创 2020-03-14 10:29:15 · 222 阅读 · 0 评论 -
LeetCode 565. Array Nesting
问题长度为N的零索引数组A包含从0到N-1的所有整数。查找并返回集合S的最长长度,其中S[i] = {A[i], A[A[i]], A[A[A]], A[A[i]],…服从以下规则。假设S中的第一个元素以index = i的元素A[i]的选择开始,那么S中的下一个元素应该是A[A[i]],然后是A[A[A[i]]……输入: A = [5,4,0,3,1,6,2]输出: 4解释: A[0]...原创 2020-03-13 13:55:22 · 153 阅读 · 0 评论 -
LeetCode 357. Count Numbers with Unique Digits
问题给定一个非负整数n,计算所有唯一数字x,其中0≤x < 10n10^n10n。输入: 2输出: 91 解释: 最后的结果应该是在 0 ≤ x < 100范围内数字的总数, 除去11,22,33,44,55,66,77,88,99,因为它们包含了相同的数字。解析这个问题其实是一个数学问题,要想求得[0,10n)[0,10^n)[0,10n)内包含不同数字字符的数的个数,...原创 2020-03-11 13:50:03 · 116 阅读 · 0 评论 -
LeetCode 376. Wiggle Subsequence 非常简单的解法
问题如果连续数之间的差值严格地交替出现在正数和负数之间,那么这个数列就称为摆动数列。第一个区别(如果存在的话)可能是积极的,也可能是消极的。一个少于两个元素的序列通常是一个摆动序列。例如,[1,7,4,9,2,5]是一个摆动序列,因为差异(6,-3,5,-7,3)交替为正和负。相反,[1,4,7,2,5]和[1,7,4,5,5]不是摆动序列,第一个是因为它的前两个差异是正的,第二个是因为它的最后...原创 2020-03-11 10:28:16 · 189 阅读 · 0 评论 -
LeetCode 322. Coin Change 经典问题,硬币兑换
问题你会得到不同面值的硬币和总额。写一个函数来计算最少数量的硬币,你需要弥补这个数量。如果那笔钱不能由硬币的任何组合来补足,则返回-1。输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1解析和LeetCode 279类似,也是背包问题的一个变种,dp[i]=min(dp[i−coins[j]]+1),j∈[0,coin...原创 2020-03-10 20:42:57 · 372 阅读 · 0 评论 -
LeetCode 916. Word Subsets
问题我们有两个数组A和B的单词。每个单词都是一串小写字母。现在,假设单词b是单词a的子集如果b中的每个字母都出现在a中,并且可以出现多次。例如,“wrr”是“warrior”的子集,但不是“world”的子集。现在说一个来自a的词a是普遍的如果对于b中的每一个b, b是a的子集。返回a中所有通用单词的列表。这些单词的顺序可以是任意的。解析题目很直观,同样我们给出一个更加直观的解法。我们先将字...原创 2020-03-06 21:11:37 · 177 阅读 · 0 评论 -
LeetCode583. Delete Operation for Two Strings
问题给定两个单词word1和word2,找出使word1和word2相同所需的最小步骤数,在每个步骤中可以删除任意字符串中的一个字符。输入: "sea", "eat"输出: 2解释: 你需要一步让“sea”变成“ea”,另一步让“eat”变成“ea”。解析乍一看看编辑距离差不多,其实最接近的是最长公共子序列问题。求得最长公共子序列之后,用原本字符串的长度之和减掉2个最长公共子序列的长...原创 2020-03-06 15:00:49 · 227 阅读 · 0 评论 -
Leetcode 486. Predict the Winner
预测赢家给出一个非负整数的分数数组。玩家1从数组的任意一端(首尾)选择一个数字,然后是玩家2重复此操作,然后是玩家1,以此类推。每次玩家选择一个号码时,该号码将不能用于下一个玩家。这将持续到所有的分数被选择。得分最高的玩家获胜。给定一组分数,预测玩家1是否获胜。你可以假设每个球员都是为了最大化自己的得分。输入: [1, 5, 2]输出: False解释: 最初,玩家1可以选择1和2。如...原创 2020-02-26 15:25:21 · 110 阅读 · 0 评论 -
LeetCode 1105. Filling Bookcase Shelves
问题有一个书的高度和宽度组成的序列,现在需要把这些书按照顺序放进书架子上,书架子的宽度是固定的shelf_widthshelf\_widthshelf_width。现在需要找到书柜最小高度。注意,在上述过程的每个步骤中,我们放置图书的顺序与给定的图书顺序相同。例如,如果我们有一个5本书的有序列表,我们可以把第一和第二本书放在第一个书架上,第三本书放在第二个书架上,第四和第五本书放在最后一个书架上...原创 2020-02-23 17:28:43 · 220 阅读 · 0 评论 -
LeetCode 712. Minimum ASCII Delete Sum for Two Strings
问题给定两个字符串,这些字符串只由a~z组成,现在需要删掉一些字符使得这两个字符串相等,求删掉的字符的ASCII码值之和最小实例输入: s1 = "sea", s2 = "eat"输出: 231解释: s1中删除字符‘s’,码值为115;s2中删除字符‘t’,码值为116,两者相加即为最后的结果。解析该题由LCS(最长公共子串)演变而来,其实LCS就是删掉的字符之后s1和s2剩下的...原创 2020-02-21 20:26:02 · 115 阅读 · 0 评论 -
Leetcode 279. Perfect Squares
问题给定一个正整数n,找到和为n的平方数的个数最小值。例子输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.解析该问题和背包问题很像。假设dp[i]表示和为i的平方数个数最小值。那么dp[i]=min(dp[i−j∗j]+1)dp[i] = min(dp[i-j*j]+1)dp[i]=min(dp[i−j∗j]+1),其中j∈j\inj∈[1,n\sqrt {n...原创 2020-02-20 15:29:35 · 105 阅读 · 0 评论 -
LeetCode 1027. Longest Arithmetic Sequence
问题找到最长等差子序列。例子输入: [3,6,9,12]输出: 4解释: 那么最长等差子序列的长度为4.输入: [9,4,7,2,10]输出: 3解释: 最长等差子序列为[4,7,10].解析这题和最长公共子序列(LCS)很像,不过不同的是每次比较需要保存差值。这样我们建一个map数组,key为两个数的差值,value为该差值出现的次数。dp[i]表示从0到第i个数所有...原创 2020-02-19 15:53:08 · 124 阅读 · 0 评论 -
Leetcode 63 Unique Paths II
问题描述假设有一个机器人从一个 m*n的网格的左上角移动到右下角,这个机器人只能向右移动或者向下移动,而且网格里有可能有障碍物阻挡前进,如下图所示:网格无障碍物记为0,有障碍物记为1。实例输入:[ [0,0,0], [0,1,0], [0,0,0]]输出: 2解释:上述3*3网格的中间有一个障碍物,因此一共有两种不同的路径:1. Right -> Right...原创 2020-02-13 20:37:13 · 87 阅读 · 0 评论 -
Leetcode 931 Minimum Falling Path Sum
问题描述给定一个方阵A,我们想要得到A的最小下降路径元素之和。下降路径是指从第一行开始,每一行都选择一个元素,但是下一行选择的元素必须是和前一行最多相隔一列。例子输入: [[1,2,3],[4,5,6],[7,8,9]]输出: 12解释: 那么可能的下降路径为: - [1,4,7], [1,4,8], [1,5,7], [1,5,8], [1,5,9] - [2,4,7], [2...原创 2020-02-13 14:00:47 · 92 阅读 · 0 评论 -
LeetCode 66. Plus One
题目题目大致意思是,给定一个数字字符数当做是一个数,然后给这个“数”加一,结果返回加一的数组。分析这道题类似小学做的那种加减法,分析一下几种情况: 1、该不该加一 2、加一进不进位的情况 3、进位后结果数组是否增加了 把这几个弄清楚其实代码就很好写了。代码class Solution { public int[] plusOne(int[] digits) { //申请原创 2017-09-05 19:22:42 · 155 阅读 · 0 评论 -
LeetCode 9. Palindrome Number 回文数
题目题目就一句话,判断一个数是不是回文数,且不占用额外内存空间。回文数就是顺过来和反过来是一样的。解答这题解答也简单,常规的做法就是将数字颠倒看是不是和原来的数相等。但是问题来了,如果这样直接判断的话,-101、-1001等都是回文数。但是在LeetCode的检测机制里并不把这些当做是回文数。因此最后判断的加一个条件。代码很简单:public class Solution { public原创 2017-09-05 15:54:55 · 149 阅读 · 0 评论 -
LeetCode number 476 Number Complement
题目Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.Note:The given integer is guaranteed to fit within the range of a 32-b原创 2017-08-23 16:13:30 · 144 阅读 · 0 评论 -
LeetCode 605. Can Place Flowers 自己的解法
题目原文大意:假定你要种花,但是相邻良两朵花之间至少有一个间隔。对应到数组中就是:0代表空格,1代表花。 给定这样的01数组,再给定数字n,判断这个数组中是否还能种下n多花,即能否插入n个1。分析敲完代码之后觉得自己虽然提交能Accepted,但是算法还是稍显冗余。我的大致思路是,得到这个数组所有为1的位置,然后根据相邻两个1之间的间隔来判断能插入多少个0,求出他们的和,如果n大于这个和,那么就不原创 2017-09-04 18:37:25 · 179 阅读 · 0 评论 -
LeetCode number387 字符串第一个没有相同的字符
题目:找到字符串中第一个没有与之相同的字符,返回其索引。 思路分析:遍历字符串,将字符存进map里,如果之前已有这个字符,那value+1。之后再遍历一遍字符串,找到第一个值为1的index。 public int firstUniqChar(String s) { Map<Character,Integer> map=new HashMap<>();原创 2017-08-17 10:12:54 · 142 阅读 · 0 评论 -
LeetCode 290 word pattern
LeetCode第290题,题目大致意思是给定两个字符串,判断字符串2的模式是否与字符串1相同,也就是说对应位置的字符是否相同。如: Examples:1.pattern = "abba", str = "dog cat cat dog" should return true.2.pattern = "abba", str = "dog cat cat fish" should return原创 2017-08-09 16:56:18 · 290 阅读 · 0 评论 -
LeetCode 485 最大连续1的个数
题目Given a binary array, find the maximum number of consecutive 1s in this array.大致题意给定一个0,1数组,找到数组中最长连续1的长度。解题思路遍历这个数组如果为1,则计数加一,如果不为一,则清空计数器,最后最大值为之前设定的最大值和计数器之间的较大者。代码如下:class Solution { public i原创 2017-08-24 13:49:14 · 400 阅读 · 0 评论 -
LeetCode 492 构造矩形
题目leetcode上面的介绍太多了,这里就简单说说题意吧。 给定一个正整数,以该正整数为面积构造一个矩形。矩形的要求为,长宽为正整数,且长不比宽小,最后一点,长宽的差距尽可能小。解答从面积的平方根开始(这里要说一下,如果面积开平方为整数,那就取这个整数;如果不是整数,那就向上取整),用面积除,得到的数转为整型,然后判断是不是能除整,这样第一组能取整的数就是最后的结果了。代码class Solut原创 2017-08-24 14:56:15 · 313 阅读 · 0 评论 -
LeetCode 383. Ransom Note 自己的解法
题目这个Ransom Note不知道怎么翻译好,算了不用在意这些细节我们直接读题目吧。题目的大致意思是,给定一个字符串a,然后再给定一个字符串b,判断b能不能由a构建出来。假定字符串中字符都是小写。分析怎么理解这个构建呢,我的理解是,字符串b中必须含有字符串a中的字符,而且必须全部都有。而且,字符串b中含有字符串a中的字符的个数必须不小于字符串a中的个数。 这样我们就构造出两个判断条件: 1、字原创 2017-09-06 18:02:54 · 369 阅读 · 0 评论 -
LeetCode 520. Detect Capital 自己的解法
题目Given a word, you need to judge whether the usage of capitals in it is right or not. 大意:给定一个单词,判断大写用法是否正确如何判断三种情况:每个字符全是大写,每个字符全是小写,除了首字符大写其它字符全小写解法也就是根据以上三种情况判断class Solution { public boolean原创 2017-08-31 13:55:31 · 218 阅读 · 0 评论 -
LeetCode 766. Toeplitz Matrix 一种简单易于理解的解法
题目Toeplitz矩阵是指那些一条对角线上的各个元素都相等。给定一个矩阵判断这个矩阵是不是Toeplitz矩阵。分析判断对角线上的元素是不是相等,一开始我的思路是将一条对角线的元素全部添加到一个list或者一个map里面,然后判断它们是不是相等。后来马上被我否决了。起始转换一下思路,只需要判断当前位置的值是不是和斜对角的值相等,如果不相等那肯定就不是。代码class Solution {原创 2018-04-06 20:32:00 · 260 阅读 · 0 评论 -
LeetCode 807. Max Increase to Keep City Skyline 城市轮廓线
题目用一个二位数组表示一个城市的建筑,二位数组的值代表建筑的高度,现在需要给建筑加高,但是又不能改变原有的城市轮廓线。保持城市轮廓线的意识是说,从左往右和从上到下看到的高度不能随着某些建筑物加高而改变。分析问题解读完成之后,其实思路就已经出来了。我们需要创建两个一位数组用于保存两个观看方向的最大值,反映在数组关系上就是,每一行的最大值组成一个数组,每一列的最大值组成另外一个数组。...原创 2018-07-09 14:45:01 · 187 阅读 · 0 评论 -
LeetCode 20. Valid Parentheses 无效的括号匹配 Java易于理解的解法
题目Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid. 给定一个只包含 ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ , ‘]’这些字符的字符串,判断该字符串是否有效。 An input string i...原创 2018-08-16 17:29:42 · 417 阅读 · 0 评论