backtracking
文章平均质量分 67
bsbcarter
这个作者很懒,什么都没留下…
展开
-
*LeetCode-Palindrome Partitioning
和以前的backtracking一样 只是需要多了一个check是否是palindrome的函数 不要被吓倒 public class Solution { public List> partition(String s) { List> res = new ArrayList>(); List list = new ArrayList();原创 2015-09-25 23:43:06 · 255 阅读 · 0 评论 -
LeetCode-Combination Sum III
这个题和上个题以及 combination那个题几乎一样 只需要注意细节 只能有1-9 并且弄清楚 n 和 k含义 public class Solution { public List> combinationSum3(int k, int n) { List> res = new ArrayList> (); List list = new Array原创 2015-09-21 10:07:33 · 230 阅读 · 0 评论 -
*LeetCode-Combinations
思路是 就像人脑枚举这些组合每次加一个递增的数字 eg 1234 3个数字combine 1 12 123 add 13 134 add 2 23 234 add 注意java的pass by reference。 res.add( list )的话 之后再改变list res里面的list也会变 所以要new 一个list public class Solution {原创 2015-09-21 05:53:38 · 250 阅读 · 0 评论 -
*LeetCode-Combination Sum
这个题由于可以一个数字使用多次 所以没有想清楚如何像上一个题一样 其实调用recursive的时候 还是传相同的数组就好 然后本层可以add 扔掉 在add一个不一样的 注意一定要先sort! public class Solution { public List> combinationSum(int[] candidates, int target) { List>原创 2015-09-21 09:49:27 · 234 阅读 · 0 评论 -
*LeetCode-Permutation
两种思路 一种是从第一个数开始add 之后每个数add就是在上一条n个数中选一个位置insert 共n+1种 这种就是浪费了一些小的list 因为下面要复制sublist public class Solution { public List> permute(int[] nums) { List> res = new ArrayList>(); hel原创 2015-11-07 01:12:14 · 305 阅读 · 0 评论 -
*LeetCode-Path Sum II
和以前做的backtracking很像 但是注意要删除这次add的node!!否则左边recurse加上了left 到了右边却没有remove left就继续了 public class Solution { public List> pathSum(TreeNode root, int sum) { List> res = new ArrayList> ();原创 2015-10-06 03:21:41 · 242 阅读 · 0 评论 -
*LeetCode-Generate Parentheses
想到了要用recursive 但是没有想清楚helper function要怎样传参 思想就是 记录还有几个left可以用 几个left需要闭合 并且要把list 和整个string传下去 不是每层都add到list 而是这个string结束 即没有可用的left 没有需要闭合的left的时候 public class Solution { public List generate原创 2015-09-18 06:53:07 · 210 阅读 · 0 评论 -
*LeetCode-Flip Game II
backtracking 每次翻两个 然后向下递归 但是注意要取下次递归的返回值 因为假如对手一定输了 那么自己才一定赢了 public class Solution { public boolean canWin(String s) { for ( int i = 0; i < s.length() - 1; i ++ ){ if ( s.cha原创 2015-10-18 07:52:23 · 745 阅读 · 0 评论 -
*LeetCode-Sudoku Solver
一开始的代码 helper是void 这样就会形成填了一遍 发现不对 就不再往下填了 helper需要是返回boolean 这样再填到最后 发现填完了 就返回true; 假如上一层返回false 并且这一层的1-9全都填完了还没返回true 那说明这一层怎么填都不行 就把这一层设置称为原来的'.' 并返回给上一层false; public class Solution { public原创 2015-09-27 03:57:47 · 210 阅读 · 0 评论 -
LeetCode-Restore IP Addresses
这个题就是corner case非常多 注意valid里面 不能只check数值 因为00 000都是不对的 同时注意最后一个.放进去后 虽然不用循环了 但是也要判断valid 并且当不需要放点之后 如果后面不valid 就直接返回 否则超时 public class Solution { public List restoreIpAddresses(String s) {原创 2015-09-27 05:30:10 · 225 阅读 · 0 评论 -
*LeetCode-N-Queens
backtrack的题就是不敢确定是否可以这样做 这个题的细节就是如何check是否这个格子可以放q 需要一个check function 还有就是先循环行 还是列 其实外层循环是在循环列 在同一行中试图放在不同列中 然后放了一个之后进入下一层recursion 放下一行 同时要注意使用string builder public class Solution { public L原创 2015-09-26 23:07:02 · 186 阅读 · 0 评论 -
LeetCode-Combination Sum II
这种题我总会忘记的细节1。array要先sort 2.循环里面next 要++ 这个题有个trick就是原来的array里面有重复的数字 这样可能出现重复的答案 有两个解决方案 第一个用一个hashset来存那些list 最后把set全都add到最终list里面 还有就是在每个数被加入之前 多一个判断 我差了一点点没写对 就是在循环里面 刚刚进去循环的那个数字即使和前面数字相同也继续做原创 2015-09-22 07:24:53 · 257 阅读 · 0 评论