- 博客(134)
- 收藏
- 关注
原创 LeetCode Implement strStr()
原题链接在这里:https://leetcode.com/problems/implement-strstr/原来Java里有这么个API, str.indexOf(subString). 这是API的用法:http://www.tutorialspoint.com/java/java_string_indexof.htmAC Java:public class Solution {
2015-09-20 05:19:40 526
原创 LeetCode ZigZag Conversion
原题链接在这里:https://leetcode.com/problems/zigzag-conversion/e.g. 若是给出0,1,2,3.....11. numRow = 40 61 57 112 48 103 9发现第一行和最后一行 每两位之间差了interval = 2*(numRow-1). 中间行没两位之间脚踢差了interval - 2*i,
2015-09-20 00:31:04 439
原创 LeetCode Length of Last Word
原题链接在这里:https://leetcode.com/problems/length-of-last-word/从最后一个字符开始数,最后一个字符是 ' ', 就一直向前移动指针直到出现第一个字符。开始计数,然后继续扫面直到出现下一个 ' ', 返回计数结果即可。Note: 1. while loop加 i--, 这里已经犯过很多次类似的错误了。2. 在使用s.charA
2015-09-19 23:51:54 436
原创 LeetCode Count and Say
原题链接在这里:https://leetcode.com/problems/count-and-say/当前的读音用来做数列的下一个"1" 读成1个1,写成"11"用来作为下一个。从i = 2开始一直到n作为外层loop, i是第 ith 个结果。进入循环后,新生成count = 1, index = 1, 然后进入内层loop, 用index 从第二位走res, 现字符等同于前字符就
2015-09-18 11:32:48 454
原创 LeetCode Longest Common Prefix
原题链接在这里:https://leetcode.com/problems/longest-common-prefix/strs中的第一个字符串从i = 0 开始,取char, 取出char后,用来比较其他所有字符串,若是此时index i 已经等于其他字符串长度或者其他某个字符创相应位置上的char不同,说明已经走不下去了,就地返回res. 若其他字符串的响应位置都有char, 且相同,
2015-09-18 10:28:45 381
原创 LeetCode Compare Version Numbers
原题链接在这里:https://leetcode.com/problems/compare-version-numbers/用string.split()方法把原有string 拆成 string 数组,但这里要注意 . 和 * 是不能直接用split(".") 或者split("*")拆开的,因为 . 可以代表任意char, * 可以代表任意字符串。所以要加 \\. 来避免individua
2015-09-18 10:01:56 422
原创 LeetCode Interleaving String
原题链接在这里:https://leetcode.com/problems/interleaving-string/这是一道DP题,用boolean数组dp维护历史数据,dp[i][j]表示长度为i的s1和长度为j的s2能否组成长度为 i+j 的s3.递推式是若当前s3的最后一个char与s1的最后一个char相同,并且dp[i-1][j]为true, 那么dp[i][j]为true;
2015-09-18 05:46:12 415
原创 LeetCode Distinct Subsequences
原题链接在这里:https://leetcode.com/problems/distinct-subsequences/这是一道DP. 简历二维数组dp, dp[i,j]表示s[0....i]有多少种方法可以减成t[0.......j].更新方法是: 若s.charAt(i-1) == t.charAt(j-1), dp[i][j] = dp[i-1][j-1](用上最新的match, 之
2015-09-18 04:31:50 486
原创 LeetCode Longest Valid Parentheses
原题链接在这里:https://leetcode.com/problems/longest-valid-parentheses/和Largest Rectangle in Histogram都是往栈内存index. 生成一个stack, 从头往后扫string, 遇到'(', 就把当前index存入到stack中。当遇到 ')'时要看当前stack是后为空,若为空,更新新起点start
2015-09-17 23:24:06 401
原创 LeetCode Maximal Rectangle
原题链接在这里:https://leetcode.com/problems/maximal-rectangle/与Largest Rectangle in Histogram Largest Rectangle in Histogram Largest Rectangle in Histogram Largest Rectangle in Histogram相似AC Java:pu
2015-09-17 22:55:18 468
原创 LeetCode Largest Rectangle in Histogram
原题链接在这里:https://leetcode.com/problems/largest-rectangle-in-histogram/参考了这篇帖子:http://www.cnblogs.com/lichen782/p/leetcode_Largest_Rectangle_in_Histogram.html里面讲的很清楚,生成了stack, 当遇到比stack 顶部更大array元素时
2015-09-17 04:35:41 739
原创 LeetCode Best Time to Buy and Sell Stock IV
原题链接在这里:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/本题是Best Time to Buy and Sell Stock III的general情况。但这里要注意若是k很大已经超过了prices.length的时候,若是按照DP的方法做会浪费时间以及空间。此时可以直接参照Best Time t
2015-09-16 12:42:17 929
原创 LeetCode Best Time to Buy and Sell Stock III
原题链接在这里:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iii/本题是Best Time to Buy and Sell Stock的进阶版。思路也很相似,仍旧是维护一个全局最优,一个局部最优。这里最多可以进行k次交易,让后本题把k变成2即可。全局最优global是到达第i天可以最多进行j次交易的利润是多少
2015-09-16 12:29:18 513
原创 LeetCode Best Time to Buy and Sell Stock II
原题链接在这里:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/是Best Time to Buy and Sell Stock的进阶版,但思路去不太相同。这里可以进行无数次交易,当然不能比prices.length - 1还多,就是每次股票比前一天差价大于0都进行交易,把这些大于0的差价相加就是最后返回的结
2015-09-16 02:27:35 516
原创 LeetCode Best Time to Buy and Sell Stock
原题链接在这里:https://leetcode.com/problems/best-time-to-buy-and-sell-stock/与Maximum Subarray相似,都是全局最优与局部最优问题。维护一个局部最优解,和一个全局最优解, 先更新局部最优解, 要么是原来的局部最优加上i天与i-1天得差价,要么是0(i天股价没有i-1天高), 然后维护全局最优,最后返回全局最优。
2015-09-15 23:05:17 630
原创 LeetCode Maximal Square
原题链接在这里:https://leetcode.com/problems/maximal-square/这是一道DP题,存储历史信息是到当前点能有的最大square, 用二维数组dp存储。更新方式是若当前点为0,则不更新,若当前点为1,则取上dp[i-1][j], 左dp[i][j-1], 左上dp[i-1][j-1]的中的最小值,开根号加一,最后平方为dp[i][j].初始第一行和
2015-09-15 22:41:29 476
原创 LeetCode Maximum Product Subarray
原题链接在这里:https://leetcode.com/problems/maximum-product-subarray/与Maximum Subarray类似。但出了要维护一个局部最大量外还需要同时多维护一个局部最小量。e.g.[-2,3,-4], 若不维护局部最小量,i = 1时,局部最大是3,全局最大也是3,i=2时 局部最大变成-4,全局最大变成3,但实际全局最大应该是8. 这
2015-09-15 12:14:55 475
原创 LeetCode Maximum Subarray
原题链接在这里:https://leetcode.com/problems/maximum-subarray/本题借鉴了这篇帖子:http://blog.csdn.net/linhuanmars/article/details/21314059采用的是DP解法,同时维护局部最优和全局最优,局部最优就是必须包含当前点的最优解,全局最优可以不包含当前点。历史信息就是local[i-1] 和
2015-09-15 11:48:57 603
原创 LeetCode Decode Ways
原题链接在这里:https://leetcode.com/problems/decode-ways/DP题,保存的历史信息是到历史点有多少种decode的方法,用长度为len+1的数组保存,更新方式是若当前位i 和前一位 i-1两个组合的数字不合法则decode方法并没有增加,仍是dp[i-1]; 若合法,则应更改为dp[i-2]+dp[i-1]. 跟走楼梯相似。初始化为了方便把dp[0]
2015-09-15 07:37:57 417
原创 LeetCode Minimum Path Sum
原题链接在这里:https://leetcode.com/problems/minimum-path-sum/是DP题,与Unique Paths 和 Unique Paths II相似。存储历史信息是走到走到历史点的最小权重路径,更新当前点用上面点和左面点中的小值加上grid中当前点的值。跟Unique Paths 和 Unique Paths II 都有相同的第二种降维方
2015-09-15 06:55:57 463
原创 Ugly Number II
原题俩接在这里:https://leetcode.com/problems/ugly-number-ii/是Ugly Number的进阶版。找出第n个ugly number.是维护一个dp数组,每一个ugly number 都是由之前的一个unly number 乘以2,3或者5得到的.i2, i3, i5记录了分别乘了多少个2, 过少个3, 多少个5. 同时这三个也是index用来调
2015-09-15 06:21:33 522
原创 LeetCode Ugly Number
原题链接在这里:https://leetcode.com/problems/ugly-number/判断一个数是不是ugly number, 是看它能否被2, 3, 5整除即可。AC Java:public class Solution { public boolean isUgly(int num) { if(num<=0){ retu
2015-09-15 06:07:23 348
原创 LeetCode Pow(x, n)
原题链接在这里:https://leetcode.com/problems/powx-n/这道题和Sqrt(x)以及Divide Two Integers都是原有公式的题。这类题目一般用二分法(Sqrt(x))和以2为基地accumulation表示法(Divide Two Integers)都是为了节省时间到O(logn).这里采用了二分法,建立一个helper返回n为正数时的p
2015-09-15 03:00:17 278
原创 LeetCode Perfect Squares
原题链接在这里:https://leetcode.com/problems/perfect-squares/本题DP, 要存储的历史信息是到当前点 i, 需要几个perfect square组合,用一个长度为n+1的数组存储,先全部初始化为Integer.MAX_VALUE. 然后所有i*i的位置上初始化为1.每次更新比较复杂,是去res[i]+1和本来值的最小值。注意这里是i.e.g
2015-09-15 00:51:10 497
原创 LeetCode Sqrt(x)
原题链接在这里:https://leetcode.com/problems/sqrtx/很自然的想到由小到大每个数算平方和x比较,但如此会用O(n)时间。类似此类查找可以用 Binary Search, 先找middle = (left + right)/2, middle^2 和 x 比较,比x小就在middle 和 right这段找,反之亦然。Note: 1. middle 要设为
2015-09-15 00:21:26 336
原创 Interview Check If n Is A Perfect Square
Check if a given number is a perfect square with only addition or substraction operation.eg. 25 returns true; 19 returns false.Perfect square number 有一个特性,比如0,1,4,9,16,25 他们之间的间隔分别是1,3,5,7,9,每次间隔都
2015-09-14 02:43:13 292
原创 LeetCode Unique Paths II
原题链接在这里:https://leetcode.com/problems/unique-paths-ii/是Unique Paths的进阶版题目。思路与Unique Paths相似,不同点在于加了障碍物,DP的更新当前点方式有所不同, 若是此处有障碍物,res里这一点就是0,若此处没有障碍物,res里这一点就同行上一列和同列上一行的和。Note: 初始化是点res[0][0].A
2015-09-14 01:39:54 404
原创 LeetCode Unique Paths
原题链接在这里:https://leetcode.com/problems/unique-paths/若从DP角度考虑这个问题就是需保存历史数据为走到当前格子的不同路径数,用二维数组res保存。 更新当前点res[i][j]为上一行同列res[i-1][j]的值 + 本行上一列res[i][j-1]的值,因为走到上一行同列的值想走到当前格都是往下走一步,左边同理。初始条件是第一行和第一
2015-09-13 07:47:48 374
原创 LeetCode Palindrome Partitioning II
原题链接在这里:https://leetcode.com/problems/palindrome-partitioning-ii/这道题与Word Break相似。用DP来做,需要保留的历史信息就是到当前点能分成几块Palindrome, 用一个int数组res保留。每次更新res[i+1], 比较i+1和res[j]+1大小,取小的。因为单个letter肯定是palindrome
2015-09-13 05:19:27 353
原创 LeetCode Palindrome Partitioning
原题链接在这里:https://leetcode.com/problems/palindrome-partitioning/本题与Word Break II相似。用递归解决子问题,如果是Palindrome就加进item,然后递归调用helper, 递归终止条件是能正好走到s.length().Note: 1. 用的item是一个list, 实际上是一个指针, 所以递归调用完需要回朔,
2015-09-13 02:22:21 315
原创 LeetCode Word Break II
原题链接在这里:https://leetcode.com/problems/word-break-ii/本题是Word Break的进阶题,要返回所有wordbreak的结果。本题参照了这篇帖子:http://www.cnblogs.com/springfor/p/3877056.html首先更具isWordBreak判断是否能拆,若能拆看从头到尾走,找到了一个wordDict里包含的
2015-09-13 01:40:09 500
原创 LeetCode Word Break
原题链接在这里:https://leetcode.com/problems/word-break/这是一道DP题,解题思路参考了这篇帖子:http://blog.csdn.net/linhuanmars/article/details/22358863这道题仍然是动态规划的题目,我们总结一下动态规划题目的基本思路。首先我们要决定要存储什么历史信息以及用什么数据结构来存储信息。然后是
2015-09-12 06:49:56 467
原创 LeetCode Triangle
原题链接在这里:https://leetcode.com/problems/triangle/从底往上动态规划,维护一个res数组,res里的每一个元素都是从底走到这一点的最小值,更新方式是取res在下一行与自己临近的两个元素的最小值加上triangle在这点本身的元素。最后返回res[0]即可。Note: 若triangle 只包含一行也考虑到了,因为若只有一行,res会先初始化成最
2015-09-12 03:08:07 349
原创 LeetCode House Robber II
原题链接在这里:https://leetcode.com/problems/house-robber-ii/是House Robber的进阶题。这里第一家和最后一家不能同时偷,所以像House Robber建立一个res1, 把从第一家到倒数第二家能偷最大值依次存入res1, 再建立一个res2, 把第二家到最后一家能偷最大值依次存入res2. 返回res1最后一个值 和res2最后一个值
2015-09-11 11:30:36 497
原创 LeetCode House Robber
原题链接在这里:https://leetcode.com/problems/house-robber/若没有房子,return 0; 若只有一个房子,return nums[0], 也就是这个房子里的钱; 若有两个房子,返回两个房子里钱较多的那个钱。若是大于两个,因为不能偷邻家,所以新建一个array, 就是res,里面对应的 i 位存能偷到的最多钱的数目, 从前往后每一步都是最优的,就是
2015-09-11 10:18:50 453
原创 LeetCode Climbing Stairs
原题链接在这里:https://leetcode.com/problems/climbing-stairs/其实是Fibonacci Number, 举个例子,n = 100,假设登到99台阶有m种方法,登到98台阶有n种方法,那么从99到100都是上一步,所以还是m种方法, 从98台阶登到100都是一次登两个台阶,还是n种方法,若果在98登一个台阶,就是到了99,这种方法已经包含在最初登到9
2015-09-11 09:51:56 293
原创 LeetCode Binary Tree Maximum Path Sum
原题链接在这里:https://leetcode.com/problems/binary-tree-maximum-path-sum/maxVal中包含着最后要返回的结果。helper函数是求当前root往下的最大路径,先算左边路径,返回值直接和0比较,若不是正数就返回0,然后同样方法算右边路径。当前最深路径看当前root的val加上左边或者右边,哪个大,helper函数返回大的那个。
2015-09-11 07:09:34 327
原创 LeetCode Binary Search Tree Iterator
原题链接在这里:https://leetcode.com/problems/binary-search-tree-iterator/AC Java:/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode rig
2015-09-11 06:07:29 318
原创 LeetCode Unique Binary Search Trees II
原题链接在这里:https://leetcode.com/problems/unique-binary-search-trees-ii/这道题是Unique Binary Search Trees的进阶版本. 返回的不是个数,而是每一个结果。循环中递归调用helper函数求解子问题,以i为root时,BST的left child 是由1到i-1生成的,BST的right child 是由i
2015-09-11 03:11:21 344
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人