![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode刷题个人看(C++)
17岁歌手想当果果
想吃想睡想见果果
展开
-
leetcode20200608 有效的括号 合并两个有序链表
1.有效的括号遇到左括号压入栈中 遇到右括号与之匹配则出栈class Solution {public: bool isValid(string s) { stack<char>symbol; if(s.size()==0){return true;} for(int i=0;i<s.size();i++){ if(s[i]=='(' || s[i]=='[' ||s[i]=='{'){原创 2020-06-08 20:21:33 · 103 阅读 · 0 评论 -
LeetCode 20200430(下一个排列)
1.下一个排列这个问题有点复杂就是说找字典序的 下一个排列的话 先从最后一位找第一个比下一位小的数 一旦找到这一位 标记为i位然后 因为我们找到的已经是第一个比后小的了 那么再从后面开始找 找到比标记位i的值大的第一个值交换(swap) 然后把标记位往后的值都给它逆序即可 (因为标记位往后都是大到小 现在要小到大)代码如下class Solution {public:...原创 2020-04-30 12:33:12 · 115 阅读 · 0 评论 -
LeetCode 20200414(移除元素)
1.移除元素自√这道题是完全自己做的使用快慢指针也就是说 只要是在进行原地算法 就使用快慢指针来解决class Solution {public: int removeElement(vector<int>& nums, int val) { if(nums.size()==0){return 0;} int cut=0;...原创 2020-04-22 18:21:41 · 72 阅读 · 0 评论 -
LeetCode 20200422(删除排序数组中的重复项)
1.删除排序数组中的重复项这道题使用 快慢指针的方法做 自己的为什么不对呢 因为题目要求对原数组进行原地操作 不可以加别的因此快慢指针需要使用注意2. 必须对数组进行判空 否则会报错 这种对于数组或者其他结构进行操作的 都先进行判空才行class Solution {public: int removeDuplicates(vector<int>...原创 2020-04-22 17:38:49 · 82 阅读 · 0 评论 -
LeetCode 20200415(两两交换链表的结点)
1.两两交换链表的结点其实没啥难度 只是在不断的定义前后中间的四个结点而已 一次while循环即可/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {...原创 2020-04-15 15:53:36 · 72 阅读 · 0 评论 -
LeetCode 20200403(删除链表的倒数第N个结点)
1.删除链表的倒数第N个结点这道题不难 其实就是先找到这个链表的长度然后计算这个要被删除的链表的前一个元素找到这个元素之后就把它直接链接到下下一个元素 即可返回自 √class Solution {public: ListNode* removeNthFromEnd(ListNode* head, int n) { if(head==NULL){retu...原创 2020-04-04 11:29:13 · 75 阅读 · 0 评论 -
LeetCode 20200401(四数之和)
1.四数之和其实和三数之和没啥区别 在外面再加一层循环 但是要注意 两个被固定的数都要来判重class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { if(nums.size()<4){return...原创 2020-04-02 18:25:47 · 87 阅读 · 0 评论 -
LeetCode 20200402(电话号码的字母组合)
1.电话号码的字母组合这道题因为涉及的每个字母数组斗眼遍历到 所以循环很多而且又不确定这个digits的长度所以采用深度优先搜索的办法DFS就可以解决class Solution {public: vector<string> letterCombinations(string digits) { if(digits.size()==0){return...原创 2020-04-02 12:22:18 · 150 阅读 · 0 评论 -
LeetCode 20200331(最接近的三数之和)
1.最接近的三数之和还是按照三数之和的办法来做先固定一个数 然后再两端移动双链表只是比较绝对值耳原创 2020-04-02 12:17:17 · 88 阅读 · 0 评论 -
LeetCode 20200325(罗马字符转整数)(哈希表的写法)
1.罗马字符转整数这道题主要是需要用哈希表来做所以要记住哈希表的使用方法map<char,int>m;赋值的时候是m[‘L’]=500;这就是哈希表的使用方法注意2:其实这道题,设置完字母的大小顺序后只要判断它的顺序反了之后 就对它进行减操作如果顺序没反的话 就正常进行加操作即可class Solution {public: int romanTo...原创 2020-03-25 19:39:17 · 145 阅读 · 0 评论 -
LeetCode 20200323(整数转罗马数字)
1.整数转罗马数字本来想着如何去考虑4和9的事情 结果一看题解的方法居然如此原始直接把个十百千的罗马数字直接编成字符数组到时候看每一位是多少直接怼就可以了class Solution {public: string intToRoman(int num) { string bit1[10]{"","I","II","III","IV","V","VI","VI...原创 2020-03-23 15:12:42 · 142 阅读 · 0 评论 -
LeetCode 20200320(盛最多水的容器)
1.盛最多水的容器其实就按照遍历的方法进行计算就可以但是为了简化计算复杂度 数组长度len>2时才考虑然后 min 和max函数都要加括号class Solution {public: int maxArea(vector<int>& height) { int max_water=0; int len=height.size...原创 2020-03-23 11:23:58 · 79 阅读 · 0 评论 -
LeetCode 20200318(字符串转换整数)
1.字符串转换整数注意:还是要注意 像昨天的问题一样 对于整数的按位加和 必须将res定义成 long(long int)否则就会报错还有就是设置一个符号位 判断是正负还有 分情况讨论首位非空字符和后面的(非首位)字符首位为正负号,以及为数字的非首位的,为数字则加,非则停止class Solution {public: int myAtoi(string str)...原创 2020-03-18 15:30:10 · 100 阅读 · 0 评论 -
LeetCode 20200317(整数反转)
1.整数反转这道题本身很简单 就把每一位提取出来放在数组里然后拿出来就行了问题出在 需要使用long int型的变量来存放res结果class Solution {public: int reverse(int x) { vector<int>arr; while(x!=0){ int temp=x%10;...原创 2020-03-17 16:05:47 · 67 阅读 · 0 评论 -
LeetCode 20200312(无重复字符的最长子串)
1.无重复字符的最长子串这道题需要用到哈希表hashmap用哈希表来记录每个字符对应法的最后位置(1)如果表中已经存在这个值 那么就应该重新确定无重复的左端点(2)更新表中的最后位置(3)再下来对无重复的长度进行计算 取maxclass Solution {public: int lengthOfLongestSubstring(string s) { in...原创 2020-03-12 15:58:03 · 165 阅读 · 0 评论 -
LeetCode 20200309(合并两个有序数组)
1.合并两个有序数组这个其实很简单 就是从后面开始倒数谁大就先排谁但是问题是 如果第二个数组没有用完 也就是j>=0 就是i已经变成0(第一个数组用完了)那么我们就直接把第二个数组连着排完就可以了反之 假如上一个循环结束时因为j=0了(第二个数组用完了 只剩下第一个数组了)那么我们就不需要动了 因为前面的已经排好了 就不用管了class Solution ...原创 2020-03-09 20:38:24 · 85 阅读 · 0 评论 -
LeetCode 20200229(分隔链表)
1.分隔链表就是先找到第一个大于目标值的位置,然后向后查找一旦发现有比它小的数就排列 在它前面原创 2020-03-09 20:26:15 · 71 阅读 · 0 评论 -
LeetCode 20200301(删除排序链表中的重复元素)
1.删除排序链表中的重复元素这道题非常非常简单 但是我也写错了这道题就是说如果碰到相等 就链接到下下个到头了就return head 即可/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int ...原创 2020-03-01 18:12:20 · 83 阅读 · 0 评论 -
LeetCode 20200224(搜索旋转排序数组)
1.搜索旋转排序数组nums[mid]<nums[right] 右连续nums[mid]>nums[right] 左连续判断完再判断缩小到哪个区间来搜素原创 2020-02-29 12:42:14 · 87 阅读 · 0 评论 -
LeetCode 20200223(删除排序数组中的重复项II)
1.删除排序数组中的重复项II其实一遍循环就可以完成但是要注意的是 nums[i]和nums[k-2]来比较要思考一下 如果题目变成最多允许重复三次或者不允许重复该怎么写最多出现三次的话:nums[i]和nums[k-3]不允许重复的话: nums[i]和nums[k-1]应该是这样的class Solution {public: int removeDuplicate...原创 2020-02-25 12:13:34 · 79 阅读 · 0 评论 -
LeetCode 20200222(单词搜索)
1.单词搜索这道题 使用回溯法的 深度优先搜索DFS一般DFS都采用递归那么如下代码中flag存储的是这个元素是否被用过了然后向上下左右四个方向来搜索递归判断word的每一个字母即可主函数的双for循环是来寻找单词的起点class Solution {public: bool DFS(vector<vector<char>>& board...原创 2020-02-24 15:36:48 · 101 阅读 · 0 评论 -
LeetCode 20200221(子集)
1.子集这道题的方法我也不知道是什么方法 就是从空集开始不断将新元素加到每个成员中去这样就可以了class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>>res; ...原创 2020-02-23 12:05:33 · 93 阅读 · 0 评论 -
LeetCode 20200220(组合DFS未完成)
1.组合这道题的组合 使用深度优先搜索DFS递归来解决问题原创 2020-02-23 11:27:55 · 71 阅读 · 0 评论 -
LeetCode 20200219(最小覆盖子串 未完成)
1.最小覆盖子串这个代码没有看懂 待议只知道是使用哈希表来解决把要求的字母都放在哈希表中然后循环这个原字符串 如果哈希表中有 就将它count++;当有效数字的计数count够了的时候 就开始检查class Solution {public: string minWindow(string s, string t) { string ans=""...原创 2020-02-20 16:19:46 · 80 阅读 · 0 评论 -
LeetCode 20200216(二维搜索矩阵)
1.二维搜索矩阵这道题的搜索方法 使用右上角搜索法若等于 则return true 若小于目标值 则下一行若大于目标值 则上一列注意1: 要把空的二维矩阵情况排除掉class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { ...原创 2020-02-19 15:53:09 · 72 阅读 · 0 评论 -
LeetCode 20200217(编辑距离)
1.编辑距离当word1的第i个和word2的第j个相等的时候就可以不考虑这一对了 直接考虑下一对dp[i][j]=dp[i-1][j-1];如果不相等 那么就需要进行操作了插入的时候 dp[i][j]=dp[i][j-1]替换的时候 dp[i][j]=dp[i-1][j-1];删除的时候 dp[i][j]=dp[i-1][j];别人的简洁代码如下 自己没写cl...原创 2020-02-17 14:03:52 · 106 阅读 · 0 评论 -
LeetCode 20200213(爬楼梯)
1.爬楼梯不知道为什么编译不通过但是很简单就是斐波那契数列的思路跳n个台阶 每次可以1 or 2那么我跳n个的方法数就等于 跳n-1 个的方法(再跳一个)加上 跳 n-2 个的方法(再跳2个) 没其他的了 这儿就是斐波那契的方法下面是我自己的方法 看一下问题出在哪儿(编译未通过)class Solution {public: int climbStairs(i...原创 2020-02-15 19:34:29 · 96 阅读 · 0 评论 -
LeetCode 20200215(x的平方根)
1.x的平方根这道题本身不难 因为就涉及到二分法来求根但是因为我所做的二分法时间超出限制注意1:首先要想到这个平方根一定不会大于x/2+1 因此右端是x/2+1然后 我的想法是判断是否等于其实是应该在左小于右就循环然后呢 当平方等于的时候刚好return 如果没找到那就大小 大了 就mid-1小了就mid+1注意2: 这个需要的是 用 long long 类型而不...原创 2020-02-15 14:41:40 · 81 阅读 · 0 评论 -
LeetCode 20200208(加一?)
1.加一这道题我自己的想法是把这个数字提取出来然后进行加一再把这个数字安排到 数组里面去下面是我的做法(用一个栈实现的倒序)(但是好像没有人和我的做法一样)class Solution {public: vector<int> plusOne(vector<int>& digits) { int len=digits.size(...原创 2020-02-09 17:46:42 · 77 阅读 · 0 评论 -
LeetCode 20200207(有效数字)
1.有效数字这道题太难了太难了了要考虑空格 符号 自然指数 小数点 数字 五种符号class Solution {public: bool isNumber(string s) { bool num= false; bool exp=false; bool bot=false; bool sign=false; ...原创 2020-02-09 11:45:01 · 121 阅读 · 0 评论 -
LeetCode 20200206(最小路径和)
1.最小路径和这个问题怎么解决呢就是说把问题放在路径规划上还是先考虑第一行和第一列的问题 然后就看中间就行了(代码自己写的 有未知的问题)class Solution {public: int minPathSum(vector<vector<int>>& grid) { int m=grid.size(); ...原创 2020-02-08 13:59:25 · 189 阅读 · 0 评论 -
LeetCode 20200205(不同路径II)
1.不同路径II对第一行和第一列的进行重新设置 即对于障碍物以及后面的都置零然后对中间的元素进行设置 中间如果有障碍物 就当前置零剩下的跟不同路径的解法一样class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { ...原创 2020-02-07 14:40:40 · 68 阅读 · 0 评论 -
LeetCode 20200204(不同路径)
1.不同路径路径规划问题采用递归的方法来解决画方格 m-1 n-1class Solution {public: int uniquePaths(int m, int n) { vector<vector<int>>dp(m,vector<int>(n)); for(int i=0;i<m;i++){...原创 2020-02-06 16:40:27 · 89 阅读 · 0 评论 -
LeetCode 20200203(旋转链表)
1.旋转链表这道题做过一遍了 很简单 就是对链表的基本操作计算链表的长度 然后找到要截断的地方进行重组记得写一个虚拟头结点 重组 即可/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(i...原创 2020-02-05 12:05:18 · 122 阅读 · 1 评论 -
LeetCode 20200202(螺旋矩阵II,合并区间)
1.螺旋矩阵II这道题就是把按顺序排列的矩阵依次计数就行了c++注意整个螺旋把i++和i–不要搞混了对了 还要注意二维数组的长度定义vector<vector> res (n,vectorn)class Solution {public: vector<vector<int>> generateMatrix(int n) { ...原创 2020-02-05 12:00:39 · 109 阅读 · 0 评论 -
LeetCode 20200201(N皇后,最大子序和,螺旋矩阵)
1.N皇后这个问题其实不难解决列一个数组来存放每一行的皇后放在哪儿方法就是每一行去放置 每次只判断当前放置的是否与之前的冲突就行了for一个循环来决定它放在当前行的哪一个然后内部for循环判断是否与前面的某一行冲突接下来就是 如果冲突就把它break 进行下一个放置 如果不冲突就考虑下一行的放置直到达到要求的行数 就说明这种放置时允许的 计算作一种放法class So...原创 2020-02-02 20:19:06 · 145 阅读 · 0 评论 -
LeetCode 20200129(不同的二叉搜索树)
1.不同的二叉搜索树从递归角度来进行逐个计算类似于斐波那契数列的计算方式先考虑 0个结点 一种(空树)1个结点 一种2个结点的时候就是考虑 先固定一个结点作为根结点 然后分两种啊 一种是左子树结点数0右子树为1 另一种是 左为1右为0 节点为3,4,n的情况不断累加class Solution { int numTrees(int n) { /...原创 2020-01-30 11:12:33 · 87 阅读 · 0 评论 -
LeetCode 20200127(最后一个单词 的长度)
1.最后一个单词的长度注意1.要考虑如果字符串末尾是空格怎么办 所以用length–将需要考虑的长度缩减注意2 然后用一个变量存放单词长度 这个参数一旦碰到空格就置零 否则进行计数注意3 continueclass Solution {public: int lengthOfLastWord(string s) { int len=s.size(); ...原创 2020-01-29 11:27:58 · 114 阅读 · 0 评论 -
LeetCode 20200126(插入区间)
1.插入区间这道题还是有点复杂分别考虑有交叉区间和无交叉区间先检查前面的无交叉区间如果当前区间的末尾值都小于新区间的首值 那一定无交叉即直接添加到结果vector中如果有交叉 那么再看(此时当前区间的末尾已经大于新区间的首值 再看当前的首值是否小于新区间首值 如果小于 说明重叠 如果没有小于 就说明无重叠 直接放置即可 )如果重叠 就取首值的最小值 和末尾值的最大值 即...原创 2020-01-27 14:00:58 · 83 阅读 · 0 评论 -
LeetCode 20191127(plus)
1.搜索插入位置自解√这道题其实非常简单,就是for循环 然后如果没到target值,就继续,比它大了就返回当前下标或者当相等的时候 也返回当前值最后 要注意一点就是注意: 如果target比最后一个元素还大的时候 就会退出循环而没有return值所以这种情况的话 就需要return nums.size()class Solution {public: int ...原创 2019-11-28 22:35:29 · 79 阅读 · 0 评论