LeetCode
lBigHead
这个作者很懒,什么都没留下…
展开
-
156. Binary Tree Upside Down
返回的root的 left 和right 要设定为null。class Solution {private: TreeNode* ret; TreeNode* head;public: TreeNode* upsideDownBinaryTree(TreeNode* root) { if(root == NULL) return NULL; ...原创 2019-03-13 17:58:04 · 143 阅读 · 0 评论 -
240. Search a 2D Matrix II
(1)从左下角开始seach。 bool searchMatrix(vector<vector<int> >& matrix, int target) { int m = matrix.size(); if(m==0) return false; int n = matrix[0].size(); ...原创 2019-03-11 11:14:00 · 104 阅读 · 0 评论 -
300. Longest Increasing Subsequence
(1) 动态规划法(2) 主要归结出:ret[i]=max(ret[i],ret[j]+1);int lengthOfLIS(vector<int>& nums) { if(nums.size() == 0) return 0; vector<int> ret(nums.siz...原创 2019-03-11 00:24:37 · 125 阅读 · 0 评论 -
17. Letter Combinations of a Phone Number
穷举法:class Solution { vector<string> ret;public: vector<string> letterCombinations(string digits) { vector<string> dict = {" ","*","abc","def","ghi","原创 2019-03-10 23:33:00 · 116 阅读 · 0 评论 -
49. Group Anagrams
(1) 关键使用排序后的字串最为key,比较唯一。(2) 排序后的字串相同的,放到同一个list里。vector<vector<string>> groupAnagrams(vector<string>& strs) { vector<vector<string>> ret; map&...原创 2019-03-10 23:04:21 · 123 阅读 · 0 评论 -
208. Implement Trie (Prefix Tree)
(1) 字典树。(2) 是否word;class TrieNode{ public: TrieNode* child[26]; bool isWord; TrieNode():isWord(false) { for(int i=0;i<26;i++) child[i] = NULL; }};...原创 2019-03-10 22:30:22 · 91 阅读 · 0 评论 -
380. Insert Delete GetRandom O(1)
关键是random() 的函数。class RandomizedSet {private: map<int,int> m;public: /** Initialize your data structure here. */ RandomizedSet() { m.clear(); } /** Inserts a...原创 2019-03-10 19:57:06 · 126 阅读 · 0 评论 -
150. Evaluate Reverse Polish Notation
(1) 使用stack;(2) 两个operator数的顺序。(3) 每次只计算一次,并且把结果再压入stack,作为下一次操作数。(4) 如果没有operator,那么stack里只是保存了最后一次计算的结果,直接return。int evalRPN(vector<string>& tokens) { stack<int> s...原创 2019-03-10 18:44:57 · 104 阅读 · 0 评论 -
863. All Nodes Distance K in Binary Tree
(1) 关键找到target node的 所有root, 包括自身;(2) 排除target所在子树, 找到距离为 (k-i) > 0 的node list。其中i为root到target的距离。class Solution { //find path vector<TreeNode*> findTarget(TreeNode* r...原创 2019-03-10 13:46:14 · 138 阅读 · 0 评论 -
71. Simplify Path
思路是把除了 非"." 和 ".." 的目录保存下来,如果遇到 "..",向前去掉一个目录。注意:结尾可能没有 ‘/’string simplifyPath(string path) { string ret = ""; vector<string> v; string s=""; f...原创 2019-03-10 11:38:00 · 95 阅读 · 0 评论 -
525. Contiguous Array
思想巧妙:(1) 把0变成-1;(2) sum值相同的位置,说明 -1和1的个数相同。(3) len的计算就是 i-m[sum]int findMaxLength(vector<int>& nums) { if(nums.size() == 0 || nums.size() == 1) return 0; ...翻译 2019-03-14 16:03:16 · 109 阅读 · 0 评论 -
64. Minimum Path Sum
(1) 使用动态编程法(2) 注意初始化第一行和第一列.int minPathSum(vector<vector<int>>& grid) { int m = grid.size(); if(m == 0) return 0; int n = grid[0].size(); ...原创 2019-03-09 22:29:30 · 100 阅读 · 0 评论 -
535. Encode and Decode TinyURL
(1) 使用 vector<string>来保存一个 long url。用该url所在index追加到后面返回 short url。(2)这种方法的对于相同url比较浪费空间。(3)不安全。class Solution { vector<string> mList;public: // Encodes a URL to a shor...原创 2019-03-11 16:03:32 · 104 阅读 · 0 评论 -
63. Unique Paths II
思路:动态规划方法。 路径数目 ret[i][j] = ret[i-1][j] + ret[i][j-1](1) 注意边界和障碍的判断,如果是障碍点,为0;(2) 注意返回值会溢出。int uniquePathsWithObstacles(vector<vector<int>>& grid) { int m = grid.size()...原创 2019-03-13 14:26:57 · 152 阅读 · 0 评论 -
651. 4 Keys Keyboard
主要总结规律:动态规划法。(1) N < = 6, 最大数目为 N;(2) N >6的时候分别计算 ret(j-k)*(k-1)的最大值, ret[j] > ret[j-1]。 参看红色部分的逻辑。int maxA(int N) { if(N <= 0) return 0; ...原创 2019-03-12 18:10:12 · 181 阅读 · 0 评论 -
509. Fibonacci Number
注意: 边界条件的判断。动态规划法比递归效率高。int fib(int N) { if(N==0 || N==1) return N; vector<int> ret(N+1,0); ret[0] = 0; ret[1] = 1; for(int i...原创 2019-03-12 16:08:31 · 125 阅读 · 0 评论 -
438. Find All Anagrams in a String
滑块思想:(1) 先用字串p初始化 m(长度为256,值为0) , 因为char最多是256个;(2) 注意滑动规则,p.size()范围内,如果right在 p里, m[ s[right]] 必定 >=1; 此时我们匹配的字符数目 cnt--, 并且把 m里去掉一个字符 s[right],然后再向右边滑动。(3) 当 cnt = 0时,完全匹配上。(4) 如果...原创 2019-03-12 15:35:34 · 116 阅读 · 0 评论 -
567. Permutation in String
(1)不care order。class Solution {public: bool checkInclusion(string s1, string s2) { if (s1.size() > s2.size()) return false; int n1=s1.size(), n2=s2.size(); vector&...原创 2019-03-16 19:27:11 · 178 阅读 · 0 评论 -
424. Longest Repeating Character Replacement
(1)滑动窗口。 most +k最大,如果比这个值大,需要left++;(2)关键是维护一个most的最大值。class Solution {public: int characterReplacement(string s, int k) { if(s.size()<=k) return s.size(); ...翻译 2019-03-16 19:25:31 · 197 阅读 · 0 评论 -
611. Valid Triangle Number
(1)三角形两个小边的和大于第三边;(2)数组sort之后,最大边设置成最大,次大边选择最大-1,最小边可以选择的种类。int triangleNumber(vector<int>& nums) { if (nums.size() == 0 || nums.size() < 3) { return 0; ...原创 2019-03-16 18:19:24 · 182 阅读 · 0 评论 -
223. Rectangle Area
(1)模拟相交;(2)不要遗漏重叠的情况。int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) { int areaOfA = (C - A) * (D - B); int areaOfB = (G - E) * (H - F); ...原创 2019-03-16 17:59:19 · 324 阅读 · 0 评论 -
161. One Edit Distance
(1) s == t, return false;(2) diff > 1 return false;(3)其中一个为"",另一个字符,为true;(4)其余的要做判断。class Solution { bool isEqual(string s,int i,string t,int j,int m,int n){ while(i<m &a...原创 2019-03-16 12:42:33 · 132 阅读 · 0 评论 -
560. Subarray Sum Equals K
int subarraySum(vector<int>& nums, int k) { auto sum = 0; auto cnt = 0; unordered_map<int, int> m; m[0] = 1; for (auto i = 0; i < nums.si...翻译 2019-03-15 22:37:50 · 116 阅读 · 0 评论 -
277. Find the Celebrity
(1)别人不认识的或者认识别人的是非名人。(2)别人都认识他,他不认识别人。int findCelebrity(int n) { if(n==0 || n==1) return 0; vector<bool> v(n,true); for(int i=0;...原创 2019-03-11 18:44:47 · 152 阅读 · 0 评论 -
468. Validate IP Address
1、 IPv4的规则: (1)字串总长7~15 bytes; (2)有三个 ‘.’, (3) 每个点隔开的数字长度为 0~3。每个位数 ‘0’~‘9’,并且三个bit组合范围为 0 ~ 255; (4)四个数字中,开头不可以是 ‘0’;2、IPv6的规则: (1)字串总长 15 ~ 39,由7个‘:’...原创 2019-03-11 17:45:44 · 200 阅读 · 0 评论 -
623. Add One Row to Tree
//关键注意 d == 1的情况。class Solution {public: TreeNode* addOneRow(TreeNode* root, int v, int d) { if(root == NULL) return new TreeNode(v); if(d == 1) { ...原创 2019-03-15 15:50:58 · 189 阅读 · 0 评论 -
337. House Robber III
(1) 每个Node分为要用和不要用两种case。(2) 如果当前root要被使用,那么相邻的node遍布可以使用;(3) 如果当前node不被使用,那么相邻node可以用也可以不用,找到最大值相加。class Solution {public: //select----------是root使用 //non-------------root不被使用 voi...原创 2019-03-09 21:38:47 · 95 阅读 · 0 评论 -
39. Combination Sum
(1) 首先需要sort;(2)每个val是否可以重新利用; (3) 数组里是否又重复的数值;(4) 根据题意控制start的值。class Solution { void combinate(vector<int>& candidates,vector<int>& item, int start, int...原创 2019-03-05 23:51:55 · 96 阅读 · 0 评论 -
43. Multiply Strings
(1)返回string的长度最大为num1.size() + num2.size();(2)每次乘法后, carry + multi + str[pos] 的值;(3)整个过程模拟数字乘法;(4)最后字串头去除‘0’。string multiply(string num1, string num2) { string str(num1.size()+num...原创 2019-03-05 23:20:31 · 101 阅读 · 0 评论 -
529. Minesweeper
关键:八个方向的点要弄清楚。 使用dfs。class Solution { vector<pair<int,int>> link = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; int getMineNum(vector<vector<...原创 2019-03-05 16:36:56 · 147 阅读 · 0 评论 -
694. Number of Distinct Islands
关键是:把island转换成唯一标识的字串。class Solution { void dfs(vector<vector<int>>& grid,int i,int j,int m, int n, char flag, string& str){ if(i<0 || i>=m || j<0 || j>...原创 2019-03-04 23:51:33 · 108 阅读 · 0 评论 -
652. Find Duplicate Subtrees
注意:序列化可以唯一表示一棵树。class Solution {private: map<string,int> m; vector<TreeNode*> ret; string collect(TreeNode* root) { if(root==NULL) return "#"; //结束符不可省略 str...原创 2019-03-01 15:49:54 · 156 阅读 · 0 评论 -
48. Rotate Image
关键:总结转换后的一行和一列,总结规律。void rotate(vector<vector<int>>& matrix) { if(matrix.size()==0) return; vector<vector<int>> ret = matrix; int m = mat...原创 2019-03-03 02:36:41 · 97 阅读 · 0 评论 -
692. Top K Frequent Words
(1)计算出每个string的频率(2)使用 map<int,vector<string>>是频率由低到高排列的;(3) emplace_back()vector<string> topKFrequent(vector<string>& words, int k) { if(words.empty()){...原创 2019-03-06 23:59:48 · 246 阅读 · 0 评论 -
885. Spiral Matrix III
关键:(1) step的把握。 1,1,2,2,3,3,4,4. (2) 还有通过 (dx,dy) 控制方向。vector<vector<int>> res; int dx = 0, dy = 1; int step = 1; int count = 1; res.push_...转载 2019-03-04 14:13:15 · 130 阅读 · 0 评论 -
394. Decode String
(1) index i一定随着变化,所以函数定义一定是一个引用 &i;(2) string s传入参数一定是一个引用 &s,这样才不会占用空间。class Solution { bool isNum(char c) { if(c >='0' && c <= '9') return true;...原创 2019-03-09 15:59:12 · 146 阅读 · 0 评论 -
729. My Calendar I
可以转化成 BST tree。注意边界条件。class MyCalendar {class TreeNode {public: TreeNode(int s, int e) { start = s; end = e; left = NULL; right = NULL; } int star...原创 2019-03-09 15:29:07 · 153 阅读 · 0 评论 -
59. Spiral Matrix II
关键点:定位准确下一个起始点。vector<vector<int>> generateMatrix(int n) { vector<vector<int>> ret; if(n == 0) { return ret; } ...原创 2019-03-04 11:25:33 · 163 阅读 · 0 评论 -
286. Walls and Gates
关键:转化为铺路的问题:class Solution {public: void wallsAndGates(vector<vector<int>>& rooms) { int row = rooms.size(); if(row == 0) { return; } ...原创 2019-03-03 23:33:26 · 187 阅读 · 0 评论 -
523. Continuous Subarray Sum
(1)sum为0值的初始化;a[i]+a[i+1]+...+a[j] = nk+q;a[i]+a[i+1]+...+a[j] + ...+a[n]= mk+q;两个数字相减去 = (m-n)k.(2) m[sum]第一记录和为sum的最后一个元素的index1,再次遇到为sum的时候index2. index2-index1 > 1为元素大于...原创 2019-03-06 16:00:38 · 110 阅读 · 0 评论