摘要:
以一个"()"为一个单位,往之前的左、中、右里面插,肯定是不行的。因为有重复的形式,需要剔除,很是麻烦。 正确思路是一个半括号一个半括号的添加。 添加的时候为了保证添加下去是符合括号规律的,必须满足,在现有基础上: 左括号的数量 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)

浙公网安备 33010602011771号