文章分类 - Leetcode
摘要:最后更新 二刷 12 Jan 2017 看了一刷的做法,发现自己二刷做的真是丑陋。。重新按一刷思路做了一下。。 还是从右往左找第一个不是9的数位。。都是9的话答案就是1000000000000这= = java public class Solution { public int[] plusOne
阅读全文
摘要:傻逼题,做了好久。。 一开始backtrack,然后TLE。 只能动态规划。 dp[n]的话,如果s.charAt(n)不是0,那么dp[n] = dp[n 1]; 然后如果s.charAt(n 1)s.charAt(n)组成的数是11 26 dp[n]+=dp[n 2] 比较麻烦的地方 DP[1]
阅读全文
摘要:这个题我真是做得想打人了卧槽。 题目不难,就是算组合,但是因为是3乘3的键盘,所以只需要从1和2分别开始DFS,结果乘以4,再加上5开始的DFS就行了。 问题是这个傻逼题目的设定是,从1到8不需要经过4或者5。。。 我TEST CASE 2,2 卡了好久好久,做得我怀疑人生了,怎么算都是 (3+5)
阅读全文
摘要:这个题有点恶心的,思路和上一个差别不大,但是做起来好他妈麻烦。。 思路是先用BFS构图,Map 的adjacent list.. 然后图来做dfs 和word ladder I 的区别在于,上一题我们只要找到层数就行了,比如1 2 3 4和 1 3 2 4对我们来说答案都是4,返还就行,这里要都找出
阅读全文
摘要:一开始当字符暴力搜索,TLE。 设置了提前停止的情况,依然TLE。 后来看答案是BFS,才明白怎么回事。 找转移过程中的最短途径,其实可以当做是最短路径来做。 然后问题就是怎么建立图。 想法是,到一个点,看看WORDLIST里哪个单词从现在转移,然后加入QUEUE建立搜索过程。 CODEGANKER
阅读全文
摘要:= =这个题好像跟另一个N QUEEN一样的。。 我还以为distinct要转棋盘呢。。比如某种解旋转期盼180°和另一种一样,就要去掉。。结果发现根本不是,就是算总数,比上一个少了个构建LIST的步骤。 Java public class Solution { int res = 0; publi
阅读全文
摘要:集合类的,一看就是back track 只不过子集需要规定一下。 然后好在没有1 0 什么的。。简单了很多 Java public class Solution { public List letterCombinations(String digits) { List res = new Arra
阅读全文
摘要:二刷。 忘了一刷怎么做的,回头看很乱,也是类似于BackTrack的方法。 二刷做起来很清晰。 一个IP地址包含4个部分,每个部分可能有1、2 或者 3位。 1位可以是0 9 2位可以是1 99 3位可以是1 255 2 3位的情况下,它们的首位不能是0,比如010的值是10(assuming we
阅读全文
摘要:以一个"()"为一个单位,往之前的左、中、右里面插,肯定是不行的。因为有重复的形式,需要剔除,很是麻烦。 正确思路是一个半括号一个半括号的添加。 添加的时候为了保证添加下去是符合括号规律的,必须满足,在现有基础上: 左括号的数量 generateParenthesis(int n) { List r
阅读全文
摘要:刷 July 14 2019 没秒了,不应该啊。。想复杂了,没必要带着当前string进入下一层,直接加到TEMPLIST里 abc = dfs([a], bc) dfs([ab], c) dfs([abc], c) dfs([a,b], c) dfs([a, bc], "") Time: O(2^
阅读全文
摘要:有名的N QUEEN问题,上学的时候作为例题来讲back track。 对于这种问题,我有一个独特的小窍门,我称之为楞算法,或者生算法。英文叫做brute force..... 这个题就是backtrack,而且backtrack的情况只有一个,就是俩皇后争风吃醋,要弄死对方。每放置一个皇后,都要看
阅读全文
摘要:这个题的思路是动态规划,DP[n]代表能组成n的组合数。算1 n就可以,因为都是正数。 算dp[n]的时候遍历num[1] to num[n] index = i 如果i = nums[m]) dp[n] = dp[n] + dp[n nums[m]]; } } return dp[target];
阅读全文
摘要:DFS+BackTracking,比较经典,逻辑上也很简单。。 有一种说法是可以用暴力算法,因为只能1 9,可以直接算出总共多少种组合。。不明觉厉。 三刷。 做他妈的。。 time: O(n!) space: O(k)
阅读全文
摘要:比较典型的排列组合bakctrack. 没啥可说的。。 试一下SWAP的方式。 试个P啊。。那个是permutation..这个不是。。 三刷。 一样的,不能重复用元素了而已。。 Time: O() 和上一个一样,不会算。。只知道还是指数级别的。。 Space: O(n)
阅读全文
摘要:Backtrack的典型,为了更好的back,给原数组SORT一下会比较好,加一个数超过TARGET可以直接剪枝了。 三刷。 基本一回事,排序一下可以提前剪枝,既然没有负数。有负数就不能一个数无限次的用了。。 Time: O(n^k) n是多少个元素,K是target。这个题不会算,感觉还是指数级别
阅读全文
摘要:思路很简单,DFS。 java public class Solution { public List combine(int n, int k) { List res = new ArrayList (); if (k == 0) return res; dfs(res, n, k, 1, new
阅读全文
摘要:又一个backtrack的典型。 这次里面有重复的数字了。 就看怎么跳过重复的数字。 具体用来跳过的是 具体点是,一次for loop里,重复的数只能用一次。 比如2 2 2来说 for(int i = 0; i subsetsWithDup(int[] nums) { List res = new
阅读全文
摘要:好像没什么好办法,DFS。。 backtrack类的一种典型。。 具体总结看这个 (https://discuss.leetcode.com/topic/46159/a general approach to backtracking questions in java subsets permut
阅读全文
摘要:先翻转再算,最后再翻转。 其实没必要,翻转了是从0开始比较方便。。 直接做也完全可以…… 然后其实也不用判定谁长谁短,LOOP里面加判定,超过的直接+0就可以了。。 Time: O(n) Space: O(1) 三刷。 自己以前写的也太丑陋了。 java public class Solution
阅读全文

浙公网安备 33010602011771号