![](https://img-blog.csdnimg.cn/20181205185813477.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode
文章平均质量分 55
编程魅力
Gunther17
我很菜
展开
-
100. 相同的树
100. 相同的树class Solution { public: bool isSameTree(TreeNode* p, TreeNode* q) { if (p == nullptr&&q == nullptr)return true; if ((!p&&q)||(!q&&p)||(q->val != p->va...原创 2019-01-25 00:10:07 · 129 阅读 · 0 评论 -
98. 验证二叉搜索树
98. 验证二叉搜索树分析这道验证二叉搜索树有很多种解法,可以利用它本身的性质来做,即左<根<右,也可以通过利用中序遍历结果为有序数列来做,下面我们先来看最简单的一种,就是利用其本身性质来做,初始化时带入系统最大值和最小值,在递归过程中换成它们自己的节点值,用long代替int就是为了包括int的边界条件,代码如下:递归的:class Solution { public:...原创 2019-01-24 16:36:12 · 181 阅读 · 0 评论 -
96. 不同的二叉搜索树/95. 不同的二叉搜索树II
95. 不同的二叉搜索树II给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树:正好按照顺序,左边比i小,右边比i大。划分左右子树,递...原创 2019-01-24 13:25:37 · 347 阅读 · 0 评论 -
94. 二叉树的中序遍历/144. 二叉树的前序遍历/145. 二叉树的后序遍历
94. 二叉树的中序遍历递归版本 class Solution { public: vector&amp;lt;int&amp;gt;res; vector&amp;lt;int&amp;gt; inorderTraversal(TreeNode* root) { if(root==nullptr) return res; inorderTraversal(root-&amp;gt;le原创 2019-01-23 23:58:46 · 196 阅读 · 0 评论 -
93. 复原IP地址
93. 复原IP地址分析:为便于使用,常以XXX.XXX.XXX.XXX形式表现,每组XXX代表小于或等于255的10进制数。所以说IP地址总共有四段,每一段可能有一位,两位或者三位,范围是[0, 255],题目明确指出输入字符串只含有数字,所以当某段是三位时,我们要判断其是否越界(>255),还有一点很重要的是,当只有一位时,0可以成某一段,如果有两位或三位时,像 00, 01, 00...原创 2019-01-23 19:53:08 · 201 阅读 · 0 评论 -
92. 反转链表 II
就用1,2,3,4,5 画个图就行。class Solution {public: ListNode* reverseBetween(ListNode* head, int m, int n) { if (m &gt; n || m &lt; 0)return nullptr; ListNode *dummy = new ListNode(0); dummy-&gt;next =...原创 2019-01-21 20:58:04 · 178 阅读 · 0 评论 -
91. 解码方法
91. 解码方法题目:一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入: “226”输出: 3解释: 它可以解码为 “B...原创 2019-01-21 15:00:16 · 857 阅读 · 0 评论 -
89. 格雷编码
摘自[1][2][3]:G:格雷码 B:二进制码 n:正在计算的位根据格雷码的定义可得:G(n) = B(n+1) XOR B(n)AC code:// Binary to grey code class Solution { public: vector<int> grayCode(int n) { vector<int>res; for ...原创 2019-01-19 22:20:09 · 578 阅读 · 0 评论 -
88. 合并两个有序数组
88. 合并两个有序数组4 ms:class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int i =m; int j=0; while(j<n)...原创 2019-01-19 20:44:22 · 821 阅读 · 0 评论 -
87. 扰乱字符串
87. 扰乱字符串简单的说,就是s1和s2是scramble的话,那么必然存在一个在s1上的长度l1,将s1分成s11和s12两段,同样有s21和s22.那么要么s11和s21是scramble的并且s12和s22是scramble的;要么s11和s22是scramble的并且s12和s21是scramble的。hard.4ms 暴力递归ac。class Solution { publi...原创 2019-01-19 14:48:22 · 493 阅读 · 0 评论 -
86. 分隔链表
86. 分隔链表[1]思路:从前向后遍历链表,将结点值小于 x 的结点放入到新链表 1 中,将结点值大于等于 x 的结点放入新链表 2 中。最后,将新链表 2 拼接在新链表 1 后面即可。注意的几点:常见的 ListNode *pHead=new ListNode(0);//新建辅助节点收尾操作 置空4ms: class Solution { public: ListNode...原创 2019-01-19 10:42:23 · 201 阅读 · 0 评论 -
85. 最大矩形
85. 最大矩形hard[1]分析:此题是之前那道的 84.直方图中最大的矩形 的扩展,这道题的二维矩阵每一层向上都可以看做一个直方图,输入矩阵有多少行,就可以形成多少个直方图,对每个直方图都调用 84.直方图中最大的矩形 中的方法,就可以得到最大的矩形面积。那么这道题唯一要做的就是将每一层构成直方图,由于题目限定了输入矩阵的字符只有 ‘0’ 和 ‘1’ 两种,所以处理起来也相对简单。方法...原创 2019-01-18 23:10:17 · 131 阅读 · 0 评论 -
84.直方图中最大的矩形
直方图中最大的矩形分析:遍历数组,每找到一个局部峰值,然后向前遍历所有的值,算出共同的矩形面积,每次对比保留最大值,代码如下:class Solution { public: int largestRectangleArea(vector<int> &height) { int res = 0; for (int i = 0; i < heig...原创 2019-01-18 22:41:09 · 573 阅读 · 0 评论 -
82. 删除排序链表中的重复元素 II/83. 删除排序链表中的重复元素
82. 删除排序链表中的重复元素 II示例 1:输入: 1->1->2输出: 2直接写过这题 在剑指offer,详细解释 class Solution { public: //新建一个头节点,两个辅助指针 ListNode* deleteDuplicates(ListNode* head) { ListNode *p = new ListNode(0...原创 2019-01-18 17:27:45 · 156 阅读 · 0 评论 -
矩阵中的路径/79. 单词搜索
回溯法class Solution {public: bool hasPath(char* matrix, int rows, int cols, char* str) { if (!matrix || rows &amp;amp;lt;= 0 || cols &amp;amp;lt;= 0 || !str)return false; int *visited = new int[rows*cols]; me...原创 2019-01-17 22:45:04 · 346 阅读 · 1 评论 -
77. 组合/78.子集/90. 子集 II
77. 组合 class Solution { public: void help(vector&amp;amp;amp;amp;amp;amp;amp;amp;lt;vector&amp;amp;amp;amp;amp;amp;amp;amp;lt;int&amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;a原创 2019-01-17 15:21:33 · 242 阅读 · 0 评论 -
76. 最小覆盖子串
76. 最小覆盖子串分析:[1]采用滑动窗口,窗口有左右边界,先通过扩展右边界找出一个包含T中所有字符的子串,然后收缩左边界,直到不能再收缩。记录此时的子串。然后收缩左边界,继续扩展右边界,直到再找到满足要求的子串,和上次的进行比较,保存更小的子串。返回执行,直到右边界到达S串尾,且左边界不能再收缩。code: class Solution { public: string minW...原创 2019-01-17 14:08:56 · 220 阅读 · 0 评论 -
Leetcode 75. 颜色分类
Leetcode 75. 颜色分类分析[1]:采用两个指针,是0就和左边的数据交换,是2就和右边的数据交换。因为交换过来的元素仍可能为2,所以再次对此元素进行判断8 ms: class Solution { public: void sortColors(vector<int>& nums) { if (nums.empty())return; int...原创 2019-01-17 10:11:18 · 136 阅读 · 0 评论 -
二维数组的查找,74. 搜索二维矩阵/240. 搜索二维矩阵 II
74. 搜索二维矩阵/二维数组的查找 class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { if (matrix.empty())return false; //二分查找从左下角或右上角 int m = matrix...原创 2019-01-16 22:57:45 · 239 阅读 · 0 评论 -
73. 矩阵置零
方法1:赋值另存一个m*n的矩阵,在原矩阵为零的值相应置新的矩阵行和列为零。额外空间为O(m∗n)O(m*n)O(m∗n).方法2:两个数组,bool[m] 和 bool[n] 分别存某行有零,后者某列有零。之后根据数组值将原矩阵相应位置置零。额外空间O(m+n)O(m + n)O(m+n)。方法3:看来许久才明白。先对矩阵进行扫描,标记要进行置0的行和列,对要进行置0的行进行标。同时...原创 2019-01-16 21:36:56 · 262 阅读 · 0 评论 -
71. 简化路径
71. 简化路径总结出规律:这样我们就可以知道中间是"."的情况直接去掉,是"…"时删掉它上面挨着的一个路径,而下面的边界条件给的一些情况中可以得知,如果是空的话返回"/",如果有多个"/"只保留一个。那么我们可以把路径看做是由一个或多个"/"分割开的众多子字符串,把它们分别提取出来一一处理即可,class Solution { public: string simplif...原创 2019-01-16 11:03:20 · 144 阅读 · 0 评论 -
跳台阶/70. 爬楼梯/变态跳台阶
跳台阶/70. 爬楼梯class Solution {public: int jumpFloor(int number) { if(number==0) return 0; if(number==1) return 1; if(number==2) return 2; int f1=1; int f2=2;...原创 2019-01-15 21:46:39 · 487 阅读 · 0 评论 -
69. x 的平方根
69. x 的平方根官网上Ac,并不是考察点。 class Solution { public: int mySqrt(int x) { return sqrt(x); } };二分法分析:对于一个非负数n,它的平方根不会大于(n/2+1),画个图y=xy=\sqrt{x}y=x和y=12xy=\frac{1}{2}xy=21x就知道切点是(1,1)。在[0, n/...原创 2019-01-15 20:52:44 · 288 阅读 · 0 评论 -
66.加一/67.二进制求和
解析:两种方法都有就是在数组必要时(如999)进行插入操作。方法一: class Solution { public: vector&amp;amp;lt;int&amp;amp;gt; plusOne(vector&amp;amp;lt;int&amp;amp;gt;&amp;amp;amp; digits) { for (int i = digits.size() - 1; i &a原创 2019-01-15 15:57:00 · 235 阅读 · 0 评论 -
65. 有效数字
65. 有效数字 class Solution { public: //考察全面性 bool isNumber(string s) { int len = s.length(); if (len == 0)return false; int i = 0; while (i < len&&s[i] == ' ')i++;//skip ...原创 2019-01-15 14:03:55 · 336 阅读 · 0 评论 -
62.不同路径/63. 不同路径 II/64. 最小路径和
62.不同路径Title:有一个机器人的位于一个M×N个网格左上角(下图中标记为’Start’)。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为’Finish’)。问有多少条不同的路径?注意事项n和m均不超过100Analysis:典型的动态规划问题容易分析出状态转移方程:dp[i][j] = dp[i-1][j] + dp[i][j-1];初...原创 2019-01-13 22:34:49 · 165 阅读 · 0 评论 -
61. 旋转链表
第一次写出提交这么慢的code 5232ms: class Solution { public: //利用相隔k的两个指针 ListNode* rotateRight(ListNode* head, int k) { if (head == nullptr||k&lt;0)return nullptr; int kStep = 0; ListNode *p...原创 2019-01-13 20:17:06 · 132 阅读 · 0 评论 -
60.Permutation Sequence 序列排序
class Solution {public: string getPermutation(int n, int k) { string ret; vector&amp;amp;amp;amp;amp;lt;int&amp;amp;amp;amp;amp;gt; factorial(n,1); vector&amp;amp;amp;amp;amp;lt;char&amp;amp原创 2019-01-12 21:56:00 · 202 阅读 · 0 评论 -
58.最后一个单词的长度
Ac 0ms:class Solution { public: int lengthOfLastWord(string s) { int len = s.length(); int i = len-1,count=0; //aviod space end while(s[i]==' ')i--; while (i>...原创 2019-01-11 18:41:05 · 128 阅读 · 0 评论 -
56. 合并区间
也是常规思路:1.先按start排序2.比较后一个区间start和前一个区间的end,说明是否肯定有重叠。比较后一个区间end和前一个区间的end,是否被前面包含。经过三次按测试用例的提示Ac 13%: class Solution { public: //给出一个区间的集合,请合并所有重叠的区间。 static bool comp(Interval a, Inter...原创 2019-01-11 16:49:14 · 250 阅读 · 0 评论 -
55. 跳跃游戏
解释[1]:这个题要先理解题目,题目中说的是:数字代表的是最大的可跳跃长度,比如数字是3,那么你跳1,2,3都行,而不是只可以跳3步。分析:遍历数组一直跳就好,用maxstep记录之前i-1可以跳到的最大的步数,用num[i] + i 去贪心的更新当前i最大步骤即可。遍历的时候有几种情况:1.遍历完恰好跳到最后,或者可以跳过,是true;2.遍历的过程中遍历到第i个元素即i步,结果...原创 2019-01-11 16:09:38 · 138 阅读 · 0 评论 -
顺时针打印矩阵/54. 螺旋矩阵/59. 螺旋矩阵 II
class Solution { public: vector&amp;lt;int&amp;gt; spiralOrder(vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; matrix) { vector&amp;lt;int&amp;gt;res; if (matrix.原创 2019-01-11 12:10:46 · 146 阅读 · 0 评论 -
53. 最大子序和
动态规划思想用循环来实现。f[i]表示以i结束时最大之和,f[i]{f[i−1]+data[i]f(i−1)&amp;lt;0,i≠0data[i]f(i−1)&amp;gt;=0,i=0f[i]\left\{ \begin{matrix} f[i-1]+data[i]\begin{matrix} \begin{matrix} {} &amp;amp; {} \\\end...原创 2019-01-10 14:50:47 · 84 阅读 · 0 评论 -
50. Pow(x, n)官方的测试用例有坑
首先我想说这题太坑了,如果你先判断是奇数不是偶数,对不起通过不了。AC: class Solution { public: double ExponentUnsignRes(double base, int n) { if (n == 0)return 1.0; if (n == 1)return base; double res = ExponentUnsignR...原创 2019-01-10 10:28:12 · 147 阅读 · 0 评论 -
49.字母异位词分组
学习unordered_map[1]// C++ program to demonstrate functionality of unordered_map #include <iostream> #include <unordered_map> using namespace std; int main() { // Declaring umap to ...原创 2019-01-09 22:08:58 · 214 阅读 · 0 评论 -
48. 旋转图像
class Solution { public: //画个图我发现一步很难实现,那我就拆成两步 void rotate(vector<vector<int>>& matrix) { if (matrix.empty())return; int row = matrix.size(); int col = matrix[0].size()...原创 2019-01-09 18:51:36 · 107 阅读 · 0 评论 -
46. 全排列/47. 全排列II
这题和之前做的剑指offer上的字符串全排列。一样。分析[1]:如果原始要排列的数组顺序为1、2、3、4,现在只要分别交换1、2,1、3,1、4然后对剩下的3个元素进行递归的排列。自己的code:100%class Solution { public: vector&amp;amp;amp;amp;lt;vector&amp;amp;amp;amp;lt;int&amp;amp;amp;amp;gt;&amp;amp;原创 2019-01-09 13:41:21 · 305 阅读 · 0 评论 -
43. 字符串相乘
这题主要考察大数.当然,大数操作基本就是两个字符串的操作了[1].分析:由于num1和num2的长度小于110,所以不能利用int,long等整型数据的*运算,因为肯定会超出其所能表示的范围。既然不能将其转为整数相乘,让我们可以怎么做呢?对了,我们可以用小学时学的乘法运算竖式来计算.[2]既然我们我们已经理清了解题思路,那你还需要了解一个数学知识,那就是m位数乘以n位数,结果最多为m+n位数...原创 2019-01-09 11:00:28 · 1465 阅读 · 1 评论 -
LeetCode 39. 组合总和/40. 组合总和 II
39. 组合总和示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]示例 2:输入: candidates = [2,3,5], target = 8,所求解集为:[[2,2,2,2],[2,3,3],[3,5]]分析[1]:考虑用回溯法解题。首先将数组从小到大排序,然后从第一个数字开始遍历...原创 2019-01-07 22:29:03 · 212 阅读 · 0 评论 -
38. 报数
签到题100%AC class Solution { public: string countAndSay(int n) { string res = ""; if (n < 1)return res; res = "1"; for (int i = 0; i < n-1; i++) { string Stemple = ""; ...原创 2019-01-07 15:25:36 · 93 阅读 · 0 评论