2013年9月30日

Plus One

摘要: 1 vector plusOne(vector &digits) { 2 // Start typing your C/C++ solution below 3 // DO NOT write int main() function 4 int n = digits.size(); 5 int i,carry=1; 6 for(i = n-1; i >= 0; i--){ 7 if(carry == 0) 8 break; 9 ... 阅读全文

posted @ 2013-09-30 20:07 waruzhi 阅读(167) 评论(0) 推荐(0) 编辑

Valid Parentheses

摘要: 用一个栈存储字符串中的括号,每次读新的字符的时候,如果在栈顶发现有与它相匹配的括号,则从栈顶弹出,否则入栈。一次遍历之后,如果发现栈不为空,说明不匹配。 1 bool isValid(string s) { 2 // Start typing your C/C++ solution below 3 // DO NOT write int main() function 4 stack aStack; 5 int i, l = s.length(); 6 for(i = 0; i < l; i++){ 7 ... 阅读全文

posted @ 2013-09-30 19:58 waruzhi 阅读(151) 评论(0) 推荐(0) 编辑

Permutations

摘要: 使用递归的方式,逐步将后一个数字填充进去,所以第n个数字填充时有n个位置可放。注意在跳出低估的时候,要恢复之前的状态。 void fill(vector > &result, vector &tmp, vector &num, int step, int total){ if(step > total){ result.push_back(tmp); return; } int i, l = tmp.size(); for(i=0; i > permute(vector &num) { ... 阅读全文

posted @ 2013-09-30 19:36 waruzhi 阅读(169) 评论(0) 推荐(0) 编辑

Integer to Roman

摘要: 参照Roman to Integer里罗马数字的使用方法,链接如下http://www.cnblogs.com/waruzhi/p/3332238.htmlstring intToRoman(int num) { // Start typing your C/C++ solution below // DO NOT write int main() function string result; int t = num/1000; while(t>0){ t--; resu... 阅读全文

posted @ 2013-09-30 11:27 waruzhi 阅读(125) 评论(0) 推荐(0) 编辑

Gas Station

摘要: 1、基本思路 依次从每个加油站开始加,判断是否满足条件。O(n^2)的复杂度,会超时。2、O(n)的方法 一种思路是,如果从 i 到 j 的油的余量和小于0,则开始点必定在 i 左边,所以如果小于0,开始点左移,大于0,到达的位置右移; 1 int canCompleteCircuit(vector &gas, vector &cost) { 2 // Note: The Solution object is instantiated only once and is reused by each test case. 3 int begin = 0... 阅读全文

posted @ 2013-09-30 11:02 waruzhi 阅读(295) 评论(0) 推荐(0) 编辑

Binary Tree Level Order Traversal II

摘要: 思路同上题,不过在结束的时候用另一个vector把结果反向拷了出来。不知道有没有其他的办法。vector > levelOrderBottom(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function vector > result; result.clear(); if(root == NULL) return result; vector tmp; ... 阅读全文

posted @ 2013-09-30 10:37 waruzhi 阅读(180) 评论(0) 推荐(0) 编辑

Binary Tree Level Order Traversal

摘要: 思路比较简单,典型的宽度优先遍历,但是在使用vector的时候出现了些问题。先上ac代码: vector > levelOrder(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function vector > result; if(root == NULL) return result; result.clear(); vector tmp; ... 阅读全文

posted @ 2013-09-30 10:11 waruzhi 阅读(221) 评论(0) 推荐(0) 编辑

2013年9月29日

Search a 2D Matrix

摘要: 第一次两次二分。思路比较简单,但是要注意边界条件。 bool searchMatrix(vector > &matrix, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function int m = matrix.size(); if(m == 0) return false; int n = matrix[0].size(); if(n == 0) ... 阅读全文

posted @ 2013-09-29 11:05 waruzhi 阅读(190) 评论(0) 推荐(0) 编辑

Minimum Path Sum

摘要: 使用带记录的递归。int result[500][500]; int min(int a, int b){ if(a > &grid, int m, int n){ if(result[m][n] != -1) return result[m][n]; int tmp = 0; int height = grid.size(), width = grid[0].size(); if(m == 1){ int i; for(i = width-n; i ... 阅读全文

posted @ 2013-09-29 10:33 waruzhi 阅读(189) 评论(0) 推荐(0) 编辑

Remove Duplicates from Sorted Array II

摘要: 和I相比,最多可有两个重复的数字,所以在I的基础上,增加一个bool变量isFirst,如果只出现一次的话,就可以继续往后移一位,否则等待出现下一个不同的值时才将新的值写入。注意边界条件(老忘真不好,心中默念一百遍!)。 int removeDuplicates(int A[], int n) { // Start typing your C/C++ solution below // DO NOT write int main() function if(n <= 0) return 0; int resul... 阅读全文

posted @ 2013-09-29 09:49 waruzhi 阅读(140) 评论(0) 推荐(0) 编辑

导航