(2015/11/3)
LeetCode-36 Valid Sudoku:(easy)
1)使用数据结构
set<char> emptyset;
vector<set<char>> mp(27, emptyset);
2)下标0-8存储行中的数字,9-17存储列中的数字,18-26存储3×3块中数字。
3)双重for循环中,i表示行,9 + j表示列,18 + i / 3 + 3 * (j / 3)表示块。
(2015/11/12)
LeetCode-38 Count and Say:(easy)
1)判断参数n,返回直接输出的部分。
2)双重for循环。
LeetCode-58 Length of Last Word:(easy)
LeetCode-66 Plus One:(easy)
LeetCode-67 Add Binary:(easy)
LeetCode-70 Climbing Stairs:(easy)
1)爬楼梯,裴波那契数列。
2)公式F(1)=1, F(2)=2,........F(n)=F(n-1)+F(n-2)。
LeetCode-83 Remove Duplicates from Sorted List:(easy)
1)删除已排序的链表中的重复节点。
2)处理输入为空链表的情况。
3)使用两个指针,一个记录上一个节点,一个寻找下一个不同的节点。找到就做指针的变换(无论变换前后是否真的改变了指针)。
LeetCode-88 Merge Sorted Array:(easy)
1)题目理解:m和n是数组中已经初始化的元素。也就是说数组的大小可能比m和n大,且数组中可能有未初始化的元素。
LeetCode-100 Same Tree:(easy)
1)错误思路:分别计算出两棵树的中序遍历和先序遍历,判断他们是否相等。
错误的例子:[1,1] 和 [1,NULL,1]
2)正确思路:同时对两棵树进行遍历。递归实现。
(2015/11/14)
LeetCode-101 Symmetric Tree:(cant)
1)错误思路:对树进行 ”左子树-根-右子树“和”右子树-根-左子树“遍历后序列相等,则树是对称的。(异想天开)
错误的例子:[1,2,3,3,NULL,2,NULL]
2)正确思路:同100题,必须同时向两边进行遍历。
3)参考:https://leetcode.com/discuss/26705/15-lines-of-c-solution-8-ms
递归对二叉树进行对称遍历:
class Solution { public: bool isSymmetric(TreeNode* root) { if(root == NULL) return true; else return func(root->left, root->right); } private: bool func(TreeNode *p, TreeNode *q){ if(p == NULL && q == NULL) return true; else if(p == NULL || q == NULL) return false; else{ if(p->val != q->val) return false; else return func(p->left, q->right) && func(p->right, q->left); } } };
LeetCode-102 Binary Tree Level Order Traversal:(easy)
对二叉树按层遍历。
1)思路:用队列存放每一层的节点的指针。
LeetCode-104 Maximum Depth of Binary Tree:(easy)
求二叉树叶子节点的最大深度。
1)思路:形参ans存放目前叶子节点的最大深度(引用);形参now存放当前这次遍历的当前深度。
class Solution { public: int maxDepth(TreeNode* root) { int ans = 0; DFS(root, ans, 0); return ans; } private: void DFS(TreeNode *T, int &ans, int now){ if(T == NULL){ if(now > ans) ans = now; } else{ now++; DFS(T->left, ans, now); DFS(T->right, ans, now); } return; } };
LeetCode-107 Binary Tree Level Order Traversal II:(easy)
同LeetCode-102 Binary Tree Level Order Traversal。
1)最后在返回前,对vector<vector<int>> 变量进行一次reverse函数调用即可。