摘要:
原题地址链表归并排序真是恶心的一道题啊,哇了好多次才过。代码: 1 void mergeList(ListNode *a, ListNode *b, ListNode *&h, ListNode *&t) { 2 h = t = NULL; 3 while (a && b) { 4 ... 阅读全文
posted @ 2015-01-29 20:22
李舜阳
阅读(111)
评论(0)
推荐(0)
摘要:
原题地址基本栈操作。注意数字有可能是负的。代码: 1 int toInteger(string &s) { 2 int res = 0; 3 bool negative = s[0] == '-' ? true : false; 4 5 for (int i = neg... 阅读全文
posted @ 2015-01-29 19:06
李舜阳
阅读(141)
评论(0)
推荐(0)
摘要:
原题地址基本数据结构操作,二叉树的层次遍历。代码: 1 vector > zigzagLevelOrder(TreeNode *root) { 2 vector > res; 3 vector layer; 4 bool l2r = true; 5 ... 阅读全文
posted @ 2015-01-29 18:52
李舜阳
阅读(126)
评论(0)
推荐(0)
摘要:
原题地址双指针法。右指针不断向右试探,当遇到重复字符时停下来,此时左指针开始向右收缩,直到去掉那个重复字符。代码: 1 int lengthOfLongestSubstring(string s) { 2 map record; 3 int maxLen = 0; 4... 阅读全文
posted @ 2015-01-29 18:33
李舜阳
阅读(188)
评论(0)
推荐(0)
摘要:
原题地址Unique Binary Search Trees(参见这篇文章)的升级版做题的时候我在想,这要是把每个二叉树都独立创建一份得多麻烦啊,试试能不能共用"公共部分",试了一下,果然可以,哈哈。trees[i][j]表示数字i到j所能组成的所有二叉树的根节点代码: 1 vector gener... 阅读全文
posted @ 2015-01-29 17:48
李舜阳
阅读(371)
评论(0)
推荐(0)
摘要:
原题地址心得:做链表类题目,多用中间变量,代码的可读性比简洁性更重要,适当注释。在纸上画画图,看看各操作节点的next指针最后都指对了没。代码: 1 ListNode *swapPairs(ListNode *head) { 2 if (!head) 3 r... 阅读全文
posted @ 2015-01-29 17:40
李舜阳
阅读(168)
评论(0)
推荐(0)
摘要:
原题地址心得:有关链表的题目,多用中间变量,代码写得清晰一点,适当注释代码: 1 ListNode *insertionSortList(ListNode *head) { 2 if (!head) return NULL; 3 4 ListNode... 阅读全文
posted @ 2015-01-29 17:28
李舜阳
阅读(178)
评论(0)
推荐(0)
摘要:
原题地址中序遍历二叉树,如果出现逆序对,则说明不是合法BST代码: 1 bool isValidBST(TreeNode *root) { 2 stack st; 3 int last = 0; 4 bool hasLast = false; 5 ... 阅读全文
posted @ 2015-01-29 17:11
李舜阳
阅读(125)
评论(0)
推荐(0)
摘要:
原题地址动态规划,根据二叉树的根节点将原问题划分为两个子问题。代码: 1 int numTrees(int n) { 2 vector num(n + 1, 0); 3 4 num[0] = 1; 5 for (int i = 1; ... 阅读全文
posted @ 2015-01-29 15:07
李舜阳
阅读(202)
评论(0)
推荐(0)
摘要:
原题地址考察非递归写法。前序遍历可以参考这篇文章,后序遍历可以参考这篇代码: 1 vector inorderTraversal(TreeNode *root) { 2 TreeNode *node = NULL; 3 stack st; 4 vect... 阅读全文
posted @ 2015-01-29 14:36
李舜阳
阅读(134)
评论(0)
推荐(0)
摘要:
原题地址DFS注意以下几点:1. IP地址中间的数字范围是0~2552. IP地址中间的数字不能有前导0(0除外)3. 如果原IP串长度超过12就不用做了,直接返回空代码: 1 vector res; 2 3 void dfs(string &s, vector ans, int pos,... 阅读全文
posted @ 2015-01-29 14:28
李舜阳
阅读(170)
评论(0)
推荐(0)
摘要:
原题地址第一步,找到将要翻转的位置,记录翻转部分前一个节点(prev)第二步,翻转,记录翻转完成后这部分的首(reverseHead)和尾(reverseTail),以及翻转部分之后的一个节点(post)第三部,将prev、reverseHead、reverseTail、post连接起来代码: 1 ... 阅读全文
posted @ 2015-01-29 14:00
李舜阳
阅读(163)
评论(0)
推荐(0)
摘要:
原题地址跟Subsets(参见这篇文章)类似。但因为有重复元素,所以要考虑去重问题。什么情况下会出现重复呢?比如S = {5, 5, 5},如果要选1个5,一共有C(3,1)=3种选法,即100, 010, 001,这三种情况在集合的角度看是重复的情况。如果要选2个5,共有C(3,2)=3种选法,即... 阅读全文
posted @ 2015-01-29 12:21
李舜阳
阅读(203)
评论(0)
推荐(0)
摘要:
原题地址动态规划题,注意0导致的小陷阱。代码: 1 int numDecodings(string s) { 2 if (s.empty() || s[0] '9') return 0; 3 4 int sum = s[s.length() - 1... 阅读全文
posted @ 2015-01-29 11:48
李舜阳
阅读(172)
评论(0)
推荐(0)
摘要:
原题地址凡是涉及链表的题目,代码越清楚越好。代码: 1 ListNode *partition(ListNode *head, int x) { 2 ListNode *ltHead = NULL; 3 ListNode *ltTail = NULL; 4 ... 阅读全文
posted @ 2015-01-29 11:06
李舜阳
阅读(194)
评论(0)
推荐(0)
摘要:
原题地址递归代码谁都会,当然是写非递归代码了。最基本的写法是用一个特殊栈同时保存节点以及节点的左孩子、右孩子是否遍历过。这种思路比较简单,跟递归写法一样很好理解。前序、中序、后序的遍历写法类似。还有一种更"屌"的写法,只需要使用普通栈即可,不需要保存左孩子、右孩子是否遍历过。基本思路是:1. 只要当... 阅读全文
posted @ 2015-01-29 10:51
李舜阳
阅读(269)
评论(0)
推荐(0)
摘要:
原题地址不用除运算和模运算的除法就退化成最基本的减法如果除数是1,被除数超大,这做减法还不得累死,所以,用位运算加快速度。对于被除数和除数都是正数的情况,除法流程为:用位运算生成小于等于当前被除数一半的数字,然后一口气减掉,如此循环往复,直到被除数小于除数。对于其他被除数和除数当中有负数的情况,为了... 阅读全文
posted @ 2015-01-29 10:27
李舜阳
阅读(271)
评论(0)
推荐(0)
摘要:
原题地址基本模拟题代码: 1 ListNode *deleteDuplicates(ListNode *head) { 2 if (!head) 3 return head; 4 5 ListNode *h = NUL... 阅读全文
posted @ 2015-01-29 09:10
李舜阳
阅读(132)
评论(0)
推荐(0)

浙公网安备 33010602011771号