摘要: DFS。这种思路清晰的题目,大问题一般出在小地方。1.当DFS找到时,要返回true。这样一路true上去,否则最后格子又会被设为'.';2.计算格子所在九宫格时,要用int a = x/3*3+i; 忘记乘3了,一直错;public class Solution { public void solveSudoku(char[][] board) { // Start typing your Java solution below // DO NOT write main() function int m = board.length; ... 阅读全文
posted @ 2013-08-07 22:18 阿牧遥 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 此题思路不易想到。 首先思路参照网上,因为是O(n),很自然想到用hash或bitmap,但不能用更多的存储,就用该数组本身吧。用正负来表示是否存在,所以第一遍的时候把负数变成不可能的正数,此处设为Integer.MAX_VALUE。 编写中错误几次,1.是length为0;2.同一个数出现两遍,那 阅读全文
posted @ 2013-08-07 21:20 阿牧遥 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 有是一道组合排列题目。继续用DFS。不过这次在LeetCode网页里直接写,更接近面试的纸写。public class Solution { public ArrayList> permute(int[] num) { // Start typing your Java solution below // DO NOT write main() function ArrayList> ans = new ArrayList>(); int len = num.length; if (len == 0) ... 阅读全文
posted @ 2013-08-07 00:27 阿牧遥 阅读(446) 评论(0) 推荐(0) 编辑
摘要: 借鉴了之前加法的超时经验,就开始采用倍增法。但还是吃了负数和整数边界值的亏。最后干脆使用long得了。参考答案的递归果然更简洁易懂,而且不用考虑整数边界值的情况,精彩。public class Solution { public double pow(double x, int n) { ... 阅读全文
posted @ 2013-08-07 00:05 阿牧遥 阅读(738) 评论(0) 推荐(0) 编辑
摘要: 就是先遍历二维数组,然后用首行和首列作为标记是否整行整列要设为0。对于首行首列本身,另用两个boolean记录。public class Solution { public void setZeroes(int[][] matrix) { // Start typing your Java solution below // DO NOT write main() function int m = matrix.length; if (m == 0) return; int n = matrix[0].length... 阅读全文
posted @ 2013-08-06 23:43 阿牧遥 阅读(528) 评论(0) 推荐(0) 编辑
摘要: 荷兰三色旗问题。学以致用,理解更深刻了。顺便参看一下非常精简的一个解法,其实本质一样:http://discuss.leetcode.com/questions/251/sort-colorspublic class Solution { public void sortColors(int[] A) { // Start typing your Java solution below // DO NOT write main() function int len = A.length; if (len == 0) return; ... 阅读全文
posted @ 2013-08-05 22:03 阿牧遥 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 组合DFS。对其中需要无重复,非降序的要求,只需做个小小的“剪枝”判断就行了。import java.util.ArrayList;import java.util.Collections; public class Solution { public ArrayList> combine(int n, int k) { // Start typing your Java solution below // DO NOT write main() function ArrayList> ans = new ArrayList>(); ... 阅读全文
posted @ 2013-08-05 21:34 阿牧遥 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 子集DFS。注意:1. 层数是k还是k+1;2.Java中ArrayList的排序是Collections.sort(a)import java.util.ArrayList;import java.util.Collections;public class Solution { public ArrayList> subsets(int[] S) { // Start typing your Java solution below // DO NOT write main() function boolean[] status = new bo... 阅读全文
posted @ 2013-08-05 21:20 阿牧遥 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 简单题。二分查找的应用。犯得错误是检查了数组下界0却忘了检查上界length。public class Solution { public boolean searchMatrix(int[][] matrix, int target) { // Start typing your Java solution below // DO NOT write main() function int m = matrix.length; if (m == 0) return false; int n = matrix... 阅读全文
posted @ 2013-08-05 20:05 阿牧遥 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 先说思路。参考了这篇:http://blog.unieagle.net/2012/12/05/leetcode%E9%A2%98%E7%9B%AE%EF%BC%9Abest-time-to-buy-and-sell-stock-iii%EF%BC%8C%E4%B8%80%E7%BB%B4%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/我们可以看到这个相当于要分两段,取前一段和后一段的分别最大值。这样分割点遍历,最后是O(n^2)的复杂度。然后优化后,使用一维的DP。可以降低到O(n)。也就是先从左到右扫一遍求得以i结尾的最大利润的数组,然后从右到左扫一遍求得以i开头的 阅读全文
posted @ 2013-08-05 19:40 阿牧遥 阅读(312) 评论(0) 推荐(0) 编辑