随笔分类 - LeetCode
摘要:392. Is Subsequence 这道题目可以使用很多种解法,包括是动态规划等等。 动态规划 s为匹配字符串,t为给定字符串假设dp[i][j]表示t从开始到第i个字符时对应s从开头到第j个字符,s所否是t的子序列。 分析:在比较的过程中,如果t[i]不等于s[j],则忽略掉当前的字符,取之前
        阅读全文
                
摘要:523. Continuous Subarray Sum 题意:计算是否存在和为k的倍数连续子数组。 思路:不是很懂,大致上是说,如果第一次遇见不存在的模的结果时,则保存下来,但是如果遇到多个相同的求模的结果,说明它们之间的和必然是k的倍数。 class Solution(object): def 
        阅读全文
                
摘要:House Robber II 题意:现在盗贼偷的房间围成了一个圆圈,但同样是不能偷相邻的两间房间,求偷的最大数目。 动态规划 分析:一开始,我想,既然是一个圆圈,那么就意味着在偷最后一位的时候,不仅仅要考虑到前一位有没有偷,还要考虑到第一位有没有偷,然后想通过判断,但是发现状态转移后无法去获知第一
        阅读全文
                
摘要:198. House Robber 题意:盗贼可以到任意的房间偷东西,但是偷相邻的房间则会报警,求在不报警的情况下,偷到的最大数目的钱。 思路 这种求最大数目的题目,首先想到的就是动态规划,可以使用两个数组,分别纪录对当前房间进行偷和不偷操作后的最大数目。如果是偷当前房间,那么则不会去偷前一间房间,
        阅读全文
                
摘要:122. Best Time to Buy and Sell Stock II 题意:计算买入和卖出的最大收益,和1的区别在于,它可以进行多次交易,不过在买入新的之前需要把之前买入的给卖掉。 贪心算法 既然可以买卖多次,那么就不用维护一个数组去纪录最小值了,只要当天比前一天的收益要高,就卖出。 cl
        阅读全文
                
摘要:121. Best Time to Buy and Sell Stock 题意:寻找合适的买入和卖出的时机,找出最大价值。注意的是,买入必须在卖出之前。 动态规划 用动态规划来找最小的价值,然后维护一个变量来找最大价值差。 状态转移方程为: class Solution(object): def m
        阅读全文
                
摘要:46. 全排列 题意 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例: 解题思路 回溯:遍历数组,两两交换给定对应下标的值; 记忆化:通过遍历当前路径数组,遍历当前的路径数组选择位置来插入index对应的值实现; 实现
        阅读全文
                
摘要:227. Basic Calculator II 题意:和1相比,增加了乘号和除法,不过反而把括号去掉了,求表达式结果。 栈 下面是基于Python2,因为LeetCode只允许Python2,需要注意的是,//得到的是它们的商再向下取整,特别是负数的时候。比如: print 3//2 # 1 pr
        阅读全文
                
摘要:224. Basic Calculator 栈 思路:提前准备一个装满两位操作符的运算符栈,分别用于计算开始的结果,一个用于之后的运算符,保证每一个数字都拥有自己的运算符(不管括号),将每一位数乘以弹出的运算符的结果累加计算最终结果。 class Solution(object): def calc
        阅读全文
                
摘要:115. Distinct Subsequences 动态规划 思路:假定dp[i][j] 表示字符串S[0,i]能够匹配字符串T[0,j]的个数。如果当前下标对应的值不相等,那么我们可以将当前的字符进行抛弃,取前一位的匹配的结果;相反,如果值是相等的,那么我们可以选择保留当前字符或者不保留,因为这
        阅读全文
                
摘要:76. Minimum Window Substring 题目:计算最小区间的子字符串 滑动窗口 思路:纪录移动过程中的左边和右边窗口,并且维护最小的左边和右边窗口值,通过使用次数来判断是否要移动窗口,比如,当前ABC对应的剩余使用次数都为0,如果再次碰见A的时候,在减去1后发现它已经为-1,那么就
        阅读全文
                
摘要:22. Generate Parentheses 题意:给定括号个数,生成相互对应的括号组合。 回溯 纪录两边的括号的个数,注意每当右边括号数目和左边数目不再相等的时候,那么需要进行补齐右边的括号。 增加的形式: class Solution(object): def generateParenth
        阅读全文
                
摘要:3. Longest Substring Without Repeating Characters 题意:计算字符串中最长不重复子串的长度。 思路:一开始的想法是利用dp来做,也确实可以做到,但是它的做法需要两层循环,外层遍历处理dp,内层遍历处理该位置的子字符串中的长度最大值,然后获取到子字符串后
        阅读全文
                
摘要:6. ZigZag Conversion 题意:按照Z的顺序排放字符串,接着按照行进行输出。 思路:一开始的思路是利用数组的step去输出,但是即便计算出中间的,还要把中间的结果插入到之前的结果中,显然太麻烦了。 利用一个下标在第0层和第row-1层之间进行来回移动,添加字符串中的字符,最后将每一行
        阅读全文
                
摘要:125. Valid Palindrome 只要字母和数字,再判断是否是回文即可。 class Solution(object): def isPalindrome(self, s): """ :type s: str :rtype: bool """ if not s: return True s
        阅读全文
                
摘要:53. Maximum Subarray 题意:计算最大的连续子数组之和 动态规划 dp[i]表示为从当前下标i开始的最大子数组之和。 class Solution(object): def maxSubArray(self, nums): """ :type nums: List[int] :rt
        阅读全文
                
摘要:126. Word Ladder II 题意:从给定的字符串数组中,选择从起始字符串到终点字符串的路径。 回朔 TLE class Solution(object): def findLadders(self, beginWord, endWord, wordList): """ :type beg
        阅读全文
                
摘要:128. Longest Consecutive Sequence 题意:给定一个未排序的数组,计算数组中的数字构成连续的最大个数。 动态规划 假定dp[i]表示从开始到当前位置的最长连续个数。 分析:如果遇见下一位比当前值要大1的值,则个数加一,如果是相等,则继续使用之前的值,如果都不符合,则重置
        阅读全文
                
摘要:90. 子集 II 题意 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 解题思路 因为加进了重复元素,那么就有可能出现重复的子集,需要在加入到结果之前进行判断是否存在(首先要进行排序,保证每个子集都是有序的),使用的思路和1
        阅读全文
                
摘要:78. 子集 题意 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 解题思路 回溯:每一次递归都把当前的路径数组加入到最终的结果中,同时维护一个index,将index的值加入到当前路径数组中,将index+1往后递归; 迭代实现
        阅读全文
                
 
                    
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号