Leetcode刷题笔记
DeepLczzz
此人不懒
展开
-
《Leetcode刷题笔记》22. 括号生成
解决一个问题有好多步,每一步都有多个选项时,用回溯算法,回溯算法是一种树上的dfs,这里的树指的是递归树。回溯大致可分为3类:1.组合、子集 (无序)2.排列(有序)3.搜索例如本题,我们分2n步,每一步有两个选项:左括号or右括号,所以使用回溯算法,本题属于组合问题。按照回溯算法六步骤:1.画递归树,找状态变量2.判断结束条件3.找出选择列表4.判断枝剪5.递归进入下一层6.撤销再回到本问题,首先显而易见结束条件就是凑够了n对括号,即2n个括号,可以判...原创 2021-10-18 15:50:25 · 93 阅读 · 0 评论 -
《Leetcode刷题笔记》6. Z 字形变换
思路:建立一个和s长度一样的int数组index,标记s中每个字符所在行数。不难总结出所在行数的规律:如果numRows为4,则原字符序列每个字符所在行数为:1234321234 总是到4就递减到1就递增,将index[0]置为1,设置一个指示变量x,x=1代表当前处于递增状态,x=0代表当前处于递减状态,当index[i]==1或numRows时,改变x的值。第一次遍历后得到每个字符的下标,建立一个string数组ans_l,长度为numRows,将s中每个字符加到ans_l[字符对应行]去。最后将an原创 2021-10-16 13:50:03 · 79 阅读 · 0 评论 -
《Leetcode刷题笔记》38. 外观数列
思路:遍历字符串,统计连续相同字符的个数,如果字符串的部分字段为“33”。那么它的描述就是“23”,我们统计出连续‘3’的个数为2,将2转为字符串再与‘3’拼接即可描述。根据外观数列的特征,不难得出,最多有3位连续相同的数字,2223表示2个2,2个3,不可能出现类似2222的序列。所以外观序列中只会出现123三个数字。代码讲解:i指示当前是第几个外观数列。对于当前的外观数列,令start和end为0,只要end指向字符等于start指向字符,将end+1,到两个不相等或者end超出字符串长度,将此原创 2021-10-16 12:30:44 · 76 阅读 · 0 评论 -
《Leetcode刷题笔记》82. 删除排序链表中的重复元素 II
方法1:思路:一次遍历,首先插入一个头节点list方便遍历(因为要用到next和next->next,不然如果第一个数重复就凉凉了),令指针a指向list。 遍历链表,如果a的next和next->next值相等,那么我们令x=a->next.val。不断删除next,即a->next = a->next->next,直到next的值不等于x,即删除了所有值为x的节点。时间复杂度:0(n)代码:/** * Definition ...原创 2021-10-15 13:10:28 · 76 阅读 · 0 评论 -
《Leetcode刷题笔记》61. 旋转链表
方法1:思路:构建一个循环链表1.首先进行第一次遍历求出链表长度len2.第一次遍历到尾节点时,将末尾节点的next指向head,即构建了一个循环链表。3.再令指针a指向head(即a=a->next),进行第二次循环,找到倒数第k+1个节点(此时k已经取余),将head重置为a->next。4.断开连接,将a—>next指向nullptr。时间复杂度:O(n) 两次遍历空间复杂度:O(1)代码:/** * Definition for singly-li原创 2021-10-14 11:38:46 · 47 阅读 · 0 评论 -
《Leetcode刷题笔记》53. 最大子序和
思路:动态规划构建一个dp数组,dp[i]表示以nums[i]结尾的最大子序和。则可以想到转移方程dp[i] = max(dp[i-1]+nums[i], nums[i])方程解析:若前一个数为结尾的最大子序和为负数,那么还不如直接以本数一个数的自序和大,那么以本数结尾的最大自序和(即dp[i])即为本身。遍历nums,最后输出dp中的最大值即可。代码:class Solution {public: int maxSubArray(vector<int>&am..原创 2021-10-13 15:24:44 · 63 阅读 · 0 评论