摘要: = =这个题好像跟另一个N QUEEN一样的。。 我还以为distinct要转棋盘呢。。比如某种解旋转期盼180°和另一种一样,就要去掉。。结果发现根本不是,就是算总数,比上一个少了个构建LIST的步骤。 Java public class Solution { int res = 0; publi 阅读全文
posted @ 2016-11-08 12:35 哇呀呀..生气啦~ 阅读(96) 评论(0) 推荐(0)
摘要: 集合类的,一看就是back track 只不过子集需要规定一下。 然后好在没有1 0 什么的。。简单了很多 Java public class Solution { public List letterCombinations(String digits) { List res = new Arra 阅读全文
posted @ 2016-11-08 12:29 哇呀呀..生气啦~ 阅读(100) 评论(0) 推荐(0)
摘要: 二刷。 忘了一刷怎么做的,回头看很乱,也是类似于BackTrack的方法。 二刷做起来很清晰。 一个IP地址包含4个部分,每个部分可能有1、2 或者 3位。 1位可以是0 9 2位可以是1 99 3位可以是1 255 2 3位的情况下,它们的首位不能是0,比如010的值是10(assuming we 阅读全文
posted @ 2016-11-08 12:25 哇呀呀..生气啦~ 阅读(118) 评论(0) 推荐(0)
摘要: 以一个"()"为一个单位,往之前的左、中、右里面插,肯定是不行的。因为有重复的形式,需要剔除,很是麻烦。 正确思路是一个半括号一个半括号的添加。 添加的时候为了保证添加下去是符合括号规律的,必须满足,在现有基础上: 左括号的数量 generateParenthesis(int n) { List r 阅读全文
posted @ 2016-11-08 11:20 哇呀呀..生气啦~ 阅读(119) 评论(0) 推荐(0)
摘要: 刷 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^ 阅读全文
posted @ 2016-11-08 10:42 哇呀呀..生气啦~ 阅读(102) 评论(0) 推荐(0)
摘要: 有名的N QUEEN问题,上学的时候作为例题来讲back track。 对于这种问题,我有一个独特的小窍门,我称之为楞算法,或者生算法。英文叫做brute force..... 这个题就是backtrack,而且backtrack的情况只有一个,就是俩皇后争风吃醋,要弄死对方。每放置一个皇后,都要看 阅读全文
posted @ 2016-11-08 09:58 哇呀呀..生气啦~ 阅读(90) 评论(0) 推荐(0)
摘要: 这个题的思路是动态规划,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]; 阅读全文
posted @ 2016-11-08 06:26 哇呀呀..生气啦~ 阅读(109) 评论(0) 推荐(0)
摘要: DFS+BackTracking,比较经典,逻辑上也很简单。。 有一种说法是可以用暴力算法,因为只能1 9,可以直接算出总共多少种组合。。不明觉厉。 三刷。 做他妈的。。 time: O(n!) space: O(k) 阅读全文
posted @ 2016-11-08 06:01 哇呀呀..生气啦~ 阅读(81) 评论(0) 推荐(0)
摘要: 比较典型的排列组合bakctrack. 没啥可说的。。 试一下SWAP的方式。 试个P啊。。那个是permutation..这个不是。。 三刷。 一样的,不能重复用元素了而已。。 Time: O() 和上一个一样,不会算。。只知道还是指数级别的。。 Space: O(n) 阅读全文
posted @ 2016-11-08 05:41 哇呀呀..生气啦~ 阅读(78) 评论(0) 推荐(0)
摘要: Backtrack的典型,为了更好的back,给原数组SORT一下会比较好,加一个数超过TARGET可以直接剪枝了。 三刷。 基本一回事,排序一下可以提前剪枝,既然没有负数。有负数就不能一个数无限次的用了。。 Time: O(n^k) n是多少个元素,K是target。这个题不会算,感觉还是指数级别 阅读全文
posted @ 2016-11-08 05:20 哇呀呀..生气啦~ 阅读(88) 评论(0) 推荐(0)
摘要: 思路很简单,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 阅读全文
posted @ 2016-11-08 05:05 哇呀呀..生气啦~ 阅读(119) 评论(0) 推荐(0)
摘要: 又一个backtrack的典型。 这次里面有重复的数字了。 就看怎么跳过重复的数字。 具体用来跳过的是 具体点是,一次for loop里,重复的数只能用一次。 比如2 2 2来说 for(int i = 0; i subsetsWithDup(int[] nums) { List res = new 阅读全文
posted @ 2016-11-08 04:37 哇呀呀..生气啦~ 阅读(115) 评论(0) 推荐(0)