![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode刷题笔记(简单,中等)
个人的力扣刷题笔记,大部分是自己完全实现,小部分参考了一些优质代码总结出来的题解
斯 南
有任何问题私信我一起讨论!
算法爱好者
展开
-
leetcode 24.两两交换链表中的节点
leetcode 22原创 2022-03-30 15:04:07 · 1088 阅读 · 0 评论 -
leetcode 22.括号生成
练习地址:力扣 思路分析:本题很明显又是要用dfs 的一道题. 对于n对括号一共要生成2*n个括号,也就是每个结果的长度为2*n,那么对于每一个位置都作为一层来递归dfs,一共要进行2*n层的递归,每一层递归都有两种情况:一种是向栈中放入左括号,一种是放入右括号.每放入一个括号之后判断一下,如果已经到达了第2*n层并且左括号数等于右括号数,则此时输出栈中所有的括号排序作为一个答案压入结果保存.当没到达第2*n层时,也并不是一定可以继续向下递归,应该先判断一下,如果压入这一层的括号之后使得路径...原创 2022-03-29 10:08:34 · 59 阅读 · 0 评论 -
leetcode 20.有效的括号
练习地址:力扣思路:本题很简单,就是出入栈的考察. 对字符串进行循环扫描,每次都把扫描到字符放入栈中,如果是左括号则直接进入下一次循环,如果碰到右括号,则在压入栈中之后判断自己前面的那个字符是不是跟自己匹配的左括号,如果是的话就弹出两个栈顶.一旦在扫描过程中发现一个与自己不匹配的左括号,就直接返回false注意:一:当只有一个字符时肯定不能匹配完全,直接返回false .二:并不是能够扫描到底就证明可以返回true,因为可能栈内的元素没有匹配完全还有遗留,此时应该在循环之后对栈内是否为空再进原创 2022-03-14 15:04:58 · 298 阅读 · 0 评论 -
leetcode 19.删除链表的倒数第N个结点
练习地址:力扣思路:本题利用两次循环肯定可以做出来,但是题目要求一次扫描,其实是一道思维题.利用双指针,先预设两个指针 p 和 q ,如果删除的是倒数第n个结点,那就让 p 指向头指针,q 处于 p 往后数n-1的位置.然后让两个指针一起向后同步扫描指针,当然还要预设 pre指针指向被删除结点 p 的前方.当q扫描到链表末尾时,p指向的结点就是要删除的倒数第n个节点. 本题注意:需要单独讨论只有一个头节点的情况.c++实现:/** * Definition for singly-li原创 2022-03-11 22:12:46 · 1068 阅读 · 0 评论 -
leetcode 17.电话号码的组合
练习地址:力扣 这题其实本质上是变相的dfs / bfs,这题我选择了用dfs来做,按照给出的数字顺序依次排成几层,需要注意的点是这题里面只要求组合,而不要要求组合内部的顺序,只要一个组合内部包含同样的几个数字就算一个答案,否则这题的难度会上升一个档次。因为题目要求一个组合最多能放进4个字符,所以我们可以定义不同层下保存的字符串a,b,c,d. 当递归处理到最后一层时则把前面的字符串加起来就是答案之一加入到vector<int>res 中.另外需要注意的小点是题目给出的数字是以...原创 2022-03-11 22:14:05 · 227 阅读 · 0 评论 -
leetcode 8.字符串转化整数
练习地址:力扣atoi() 主要要求满足的有以下几点:1.在字符串最前方的空格需要忽略掉2.检查忽略掉空格之后遇到的第一个符号,如果是负号则是负数,什么符号都没有就认为是正数,接下来读入直到遇到一个非数字字符3.返回数字思路:首先用min 和 max 存放 int 所可以表示的最大值,由于结果可能超过 int 所能表示的最大数值,所以这三个参数全都使用long long int 定义.接下来按照题目要求设置字符串要求即可c++实现:class Solution {pu原创 2022-03-10 23:06:10 · 109 阅读 · 0 评论 -
leetcode 7.整数反转
练习地址:力扣思路:转换成字符串进行暴力对比,注意翻转过来之后可能会超过数的范围,所以要注意提前判断溢出c++实现:class Solution {public: int reverse(int x) { string str = to_string(x); int len = str.length(); char res[35] = {'a'}, idx = 0; if (str[0] == '-') { res[0] = str[0]; idx++; }.原创 2022-03-07 11:31:34 · 48 阅读 · 0 评论 -
leetcode 6.Z字形变换
练习地址:力扣思路:通过找到每一行对应的每一个字符在原字符串中对应的下标的规律来添加结果,比较简单c++实现:class Solution {public: string convert(string s, int numRows) { string res; int d; if(numRows==1) return s; for(int line=0;line<numRows;line++) //记录当前扫描到了第几行 .原创 2022-03-07 11:20:22 · 100 阅读 · 0 评论 -
leetcode 5.最长回文子串
练习地址:力扣思路解析:简单问题简单化,直接利用奇数对称或者偶数对称形成的两种情况的字符串进行对比,每一对匹配成功则左边界左移一位,右边界右移一位.c++代码实现:class Solution {public: string longestPalindrome(string s) { string res;int l,r; //定义左右边界 for(int i=0;i<s.size();i++) { l=i-1;r.原创 2022-03-06 23:08:10 · 8098 阅读 · 0 评论 -
leetcode 3.无重复字符的最长子串
练习地址:力扣思路解析:方法一:考虑暴力的做法,对于每一个字符串利用双指针扫描,每扫描一次利用map存储一次当前字符出现的次数,如果发现有一个字符在之前出现过,则 i 指针向后移动一位,继续令 j=i+1重新扫描,时间复杂度O(N^2) .方法二:利用滑动窗口优化.思路是这样的,假设有一个字符串bcadeafg,我们将 j 和 i 指针一开始都置于0位置,接着i指针不动, i 指针像暴力做法一样向下扫描,每扫描一个都一样将当前扫描到的字符出现的次数存放在hash表中,也就是h[s[ i ] ]+原创 2022-03-06 22:47:04 · 122 阅读 · 0 评论 -
leetcode.2 两数相加
力扣两数之和原创 2022-03-03 23:26:24 · 107 阅读 · 0 评论 -
leetcode.1 两数之和
leetcode1 两数之和 使用hash表降低时间复杂度原创 2022-02-24 22:10:23 · 117 阅读 · 0 评论