摘要: 尝试不用递归,那么就要用queue。不用递归就要用多一个queue来保存level。update:事实上,BFS一般都要用queue的。这道题目也可以用DFS解决,就是在递归的过程中传入每一层的level,那么到达某个level时,就往这个level的数组里放进数据。http://discuss.leetcode.com/questions/49/binary-tree-level-order-traversal而至于多一个queue,其实也不必,可以记录lastLevel和thisLevel两个数字来做到。public class Solution { public ArrayList... 阅读全文
posted @ 2013-08-11 23:36 阿牧遥 阅读(266) 评论(0) 推荐(0)
摘要: 一开始用了DP,大数据超时了。超时的版本:public class Solution { public boolean canJump(int[] A) { // Start typing your Java solution below // DO NOT wri... 阅读全文
posted @ 2013-08-11 17:29 阿牧遥 阅读(310) 评论(0) 推荐(0)
摘要: 用了个数组来存路径。遇'.'跳过,遇'..'回退。看了一下别人的,和我的思路一样,只是人家用了stack。我用了原始的arraylist而已。参考里的答案用了String[] splits = path.trim().split("/"); 商业代码这么写肯定好,这里如果用i,j,更好练习面试而已。public class Solution { public String simplifyPath(String path) { // Start typing your Java solution below // DO NOT write m 阅读全文
posted @ 2013-08-11 16:56 阿牧遥 阅读(210) 评论(0) 推荐(0)
摘要: 首先,此题很显然是二分查找,但边界条件并不简单。方法我用了0,1,2,3,4,5五个测试用例确定下来的。但是后来居然超时了,难道死循环?后来看了下,果然是int溢出,还是要用long。典型的坑啊。 但看了参考中的方法:http://discuss.leetcode.com/questions/245 阅读全文
posted @ 2013-08-11 16:29 阿牧遥 阅读(208) 评论(0) 推荐(0)
摘要: 秒杀,斐波那契数列。而且,其实不用像我的答案那也开数组的,用几个变量存就行了。public class Solution { public int climbStairs(int n) { // Start typing your Java solution below // DO NOT write main() function if (n == 0) return 0; if (n == 1) return 1; if (n == 2) return 2; int m[] = new int[n+1... 阅读全文
posted @ 2013-08-11 15:56 阿牧遥 阅读(173) 评论(0) 推荐(0)
摘要: 很麻烦的题目。首先列出各种情况。1.首尾空格;2.+-3.e4.出现其他字符和空格但还是经不住很多小细节:"1."".""+.1""+1.""2e.3""1e"但我觉得我的思路一开始是对的,就是先按照e分开,按照.分开,然后左右分别处理。只是后来发现左右不能用同样的方法处理。不过这哥们的状态boolean方法自然是最好,只需扫描一遍:http://blog.unieagle.net/2012/11/06/leetcode%E9%A2%98%E7%9B%AE%EF%BC%9Av 阅读全文
posted @ 2013-08-11 15:49 阿牧遥 阅读(973) 评论(0) 推荐(0)
摘要: 动态规划,此题思考许久,出错不少。动态规划的转移方程倒是想出来了,转移方程的讨论可见:http://blog.unieagle.net/2012/09/19/leetcode%E9%A2%98%E7%9B%AE%EF%BC%9Aedit-distance%EF%BC%8C%E5%AD%97%E7%A 阅读全文
posted @ 2013-08-11 14:39 阿牧遥 阅读(318) 评论(0) 推荐(0)
摘要: 动态规划。要注意way+=dp[i-1]或dp[i-2]以及way+=1的条件。我看有的人把数组命名为count的。 public class Solution { public int numDecodings(String s) { // Start typing your Java solut 阅读全文
posted @ 2013-08-11 11:31 阿牧遥 阅读(382) 评论(0) 推荐(0)
摘要: 简单题。顺手就写出来了。public class Solution { public int maxDepth(TreeNode root) { // Start typing your Java solution below // DO NOT write main() function if (root == null) return 0; if (root.left == null && root.right == null) return 1; int lmax = maxDepth(root.... 阅读全文
posted @ 2013-08-11 02:14 阿牧遥 阅读(202) 评论(0) 推荐(0)
摘要: http://community.topcoder.com/stat?c=problem_statement&pm=2402&rd=5009动态规划题。对于圈状的题目有了点感觉。题目描述:n个数围成一个圆圈,求最大的子集和使得每一个数都不和其他任何数是相邻的。f[i][0]表示2...i这些数能得到的最大和,f[i][1]表示 1....i-1这些数能得到的最大和。f[i][0] 和 f[i-1][0] , f[i-2][0]+A[i]有关系, f[i][1] 和 f[i-1][1], f[i-2][0]+A[i]有关系。计算子问题的顺序:i form 0 to n-1.pub 阅读全文
posted @ 2013-08-11 01:22 阿牧遥 阅读(588) 评论(0) 推荐(0)
摘要: http://community.topcoder.com/stat?c=problem_statement&pm=1259&rd=4493动态规划题。如果不用DP,暴力的应当在2^n*n的复杂度吧。动态规划现在我的思维还老停留在一维而且没有第二层循环。但其实如果一开始的复杂度很高,稍微有几个循环,指数级别,一点问题没有。题目描述:给出n个数:A[1], A[2], ... , A[n],求最长的子序列的长度,子序列中相邻数之间的差值是正负交替出现的。f1[i]表示 最后一个数是A[i]并且A[i]和前一个数的差值为正的最长子序列的长度。f2[i]表示最后一个数是A[i]并且A 阅读全文
posted @ 2013-08-11 00:53 阿牧遥 阅读(558) 评论(0) 推荐(0)