
LeetCode
LC刷题练习
summer丶i
等你熬过所有的苦,会遇见所有的甜❤️
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 1.两数之和
C++中使用for循环解决两数之和问题思路:我们把数组中的第一个元素拿出来与其后面的元素作和,之后用if来判断是否满足条件,使用嵌套结构完成题解注意事项:i=0开始(注意给定的是数组)j=i+!(要从第一个拿出来的元素的后一个进行循环)if条件下要加上return语句可变性:if选择语句也可以变成while语句也可满足题解class Solution {public: ...原创 2020-03-01 10:50:18 · 664 阅读 · 1 评论 -
LeetCode 2.两数相加
题目描述给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -&...原创 2020-03-10 14:55:21 · 241 阅读 · 0 评论 -
LeetCode 3.无重复字符的最长子串
题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最...原创 2020-03-16 19:38:45 · 173 阅读 · 0 评论 -
LeetCode 5.最长回文子串
题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”解题思路暴力法:利用两个for循环,找出所有可能种回文子串,每次找出一个回文子串时与前一个进行比较选择回文子串长度大的作为返回的结果回...原创 2020-03-17 19:16:06 · 206 阅读 · 0 评论 -
LeetCode 7.整数反转
题目描述给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21解题思路Cpp实现class Solution {public: int reverse(int x) { int res = 0; ...原创 2020-03-29 09:55:58 · 104 阅读 · 0 评论 -
LeetCode 8.字符串转换整数(atoi)
题目请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。假如该字符串中的第一个非空格字符不是一个有效整原创 2021-01-13 09:30:59 · 141 阅读 · 0 评论 -
LeetCode 9.回文数
题目判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。实现Java实现思路: 先将整数转换为字符串,通过利用双指针的方式判断字符串是否为回文字符串class原创 2021-01-12 20:29:58 · 127 阅读 · 0 评论 -
LeetCode 10.正则表达式匹配
题目描述给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。 示例 1:输入: s = ...原创 2020-03-18 17:22:25 · 291 阅读 · 0 评论 -
LeetCode 11.盛最多水的容器
题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2:输原创 2021-01-13 09:28:59 · 138 阅读 · 0 评论 -
LeetCode 12.整数转罗马数字
题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表原创 2020-12-11 16:45:08 · 109 阅读 · 0 评论 -
LeetCode 13.罗马数字转整数
题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并...原创 2020-03-13 14:25:01 · 98 阅读 · 0 评论 -
LeetCode 14.最长公共前缀
题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。解题思路利用双指针解决问题,考虑特殊情况即字符串数组为空时,我们返回’’,字符串...原创 2020-03-14 16:38:07 · 163 阅读 · 0 评论 -
LeetCode 15.三数之和
题目描述:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0?找出所有满足条件且不重复的三元组。给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]思路:固定选择数组中的一个元素,求出数组中剩下的元素中两数之和等...原创 2020-03-04 18:25:20 · 92 阅读 · 0 评论 -
LeetCode 16.最接近的三数之和
题目描述给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).思路与三数之和的解法相似,我...原创 2020-03-05 18:29:55 · 134 阅读 · 0 评论 -
LeetCode 19.删除链表的倒数第n个节点
题目描述给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.解题思路这个题要是做出来感觉上还是比较简单的,因为我们可以通过循环计算出链表的长度,之后找到想删除的那个元素,将它删除就好了,所以这个解题思路应该...原创 2020-03-11 19:17:07 · 144 阅读 · 0 评论 -
LeetCode 20.有效的括号
题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: fals...原创 2020-03-15 18:03:52 · 106 阅读 · 0 评论 -
LeetCode 21.合并两个有序链表
题目描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路首先两个链表是有序的,我们要合并成一个新的链表,我们就找到两个链表中头较小的作为新链表的头,之后我们每次操作获取l1指向的结点和l2指向的结点中,值较...原创 2020-03-07 15:10:28 · 693 阅读 · 0 评论 -
LeetCode 23.合并K个排序链表
题目描述合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6解题思路暴力法:依次合并两个有序链表,这样k个排序链表的合并问题就转化成了一个递归问题# Definition fo...原创 2020-03-12 12:07:50 · 105 阅读 · 0 评论 -
LeetCode 26.删除排序数组中的重复项
题目描述:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。思路:运用指针寻找不同元素,最后返回数组的长度class Solution {public: int removeDuplicates(vector<int>&a...原创 2020-03-02 08:28:30 · 197 阅读 · 0 评论 -
LeetCode 27.移除元素
class Solution {public: int removeElement(vector<int>& nums, int val) { int i=0; for(int j = 0;j < nums.size();j++) { if(nums[j]!=val) ...原创 2020-02-24 21:47:29 · 90 阅读 · 0 评论 -
LeetCode 33.搜索旋转排序数组
题目升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] )。请你在数组中搜索 target ,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。实现Java实现思路: 暴力解法:遍历整个数组,如果找到目标值,则返回返回对应索引,否则返回-1class Solution { public int search(int[] nums, int target) {原创 2021-01-15 10:20:13 · 266 阅读 · 0 评论 -
LeetCode 44.通配符匹配
题目描述给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘’ 的通配符匹配。‘?’ 可以匹配任何单个字符。'’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 。示例 1:输入:s = “aa”p = “a”输...原创 2020-03-30 20:17:47 · 254 阅读 · 0 评论 -
LeetCode 45.跳跃游戏II
题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样...原创 2020-05-04 10:06:54 · 109 阅读 · 0 评论 -
LeetCode 53.最大子序和
class Solution {public: int maxSubArray(vector<int>& nums) { if(nums.size()==0) return nums[0];//考虑特殊情况 int result = nums[0];//result记录结...原创 2020-03-01 15:10:43 · 193 阅读 · 0 评论 -
LeetCode 54.螺旋矩阵
题目给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输出: [1,2,3,4,8,12,11,10,9,5,6,7]实现Java实现思路: 思考顺时针螺旋原创 2021-01-18 12:56:21 · 170 阅读 · 2 评论 -
LeetCode 55.跳跃游戏
题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: ...原创 2020-03-28 09:57:40 · 95 阅读 · 0 评论 -
LeetCode 57.插入区间
题目描述给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例 1:输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]示例 2:输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]输出:[[1,2],[3,10],[1原创 2020-11-04 20:45:01 · 161 阅读 · 0 评论 -
LeetCode 59.螺旋矩阵II
题目给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]实现Java实现思路: 首先设定边界,确定循环条件(num<=target),因为从1到n^2这些数字都要被赋值,之后利用循环在边界内进行赋值即可,按照顺时针的顺序,从左到右,从上到下,从右到左,从下到上。class Solution { public in原创 2021-01-18 12:57:00 · 127 阅读 · 0 评论 -
LeetCode 61.旋转链表
题目给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例 2:输入: 0->1->原创 2021-01-18 18:39:46 · 141 阅读 · 0 评论 -
LeetCode 62.不同路径
题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向右 -> 向下2. 向右 -> 向下 -> 向右3. 向原创 2021-01-19 11:54:45 · 166 阅读 · 0 评论 -
LeetCode 70.爬楼梯
题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶实现Java实现思路: 动态规划状态转移方程:f(x)原创 2021-01-19 13:26:59 · 167 阅读 · 0 评论 -
LeetCode 78.子集
题目描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]解题思路利用二进制数的位运算左移运算左移运算,用符号<<表示,操作a<<b就是把a...原创 2020-04-24 09:40:10 · 146 阅读 · 0 评论 -
LeetCode 83.删除排序链表中的重复元素
题目描述给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。输入: 1->1->2输出: 1->2输入: 1->1->2->3->3输出: 1->2->3思路采用双指针跟之前删除数组中的重复元素比较相似,思路也相同,这里就不多做解释了时间复杂度O(n)/** * Definition for singl...原创 2020-03-08 11:24:53 · 242 阅读 · 0 评论 -
LeetCode 88.合并两个有序数组
暴力法:给了两个数组,我们想把两个数组合并成一个数组后,再对这个数组进行排序,即得到了我们想要的结果。class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int i=m; int ...原创 2020-03-01 15:11:13 · 141 阅读 · 0 评论 -
LeetCode 89.格雷编码
题目描述格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。示例 1:输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的 n,其格雷编码序列并不唯一。例如,[0,2,3,1] 也是一个有效的格雷编码序列。00 ...原创 2020-04-24 10:46:37 · 124 阅读 · 0 评论 -
LeetCode 94. 二叉树的中序遍历
题目描述给定一个二叉树,返回它的中序 遍历。解题思路递归法:通过对根节点的判空,如果不为空就根据中序遍历的条件访问左子树,之后返回根节点,再访问右子树,这样的一个递归过程Cpp实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left...原创 2020-03-22 15:52:16 · 186 阅读 · 0 评论 -
LeetCode 95.不同的二叉搜索树 II
题目描述给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。解题思路递归法:通过循环遍历每一个元素,作为根节点,比它小的元素只能属于他的左子树,比它大的节点属于它的右子树,左子树与右子树的所有可能利用递归方法,将所有可能的左子树存放在lefts中,右子树的可能存放在rights中Cpp实现/** * Definition for a binary tree n...原创 2020-03-23 21:10:32 · 173 阅读 · 0 评论 -
LeetCode 99.恢复二叉搜索树
题目描述二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。解题思路二叉搜索树:根节点的左子树值小于根节点,根节点的右子树值大于根节点,根据中序遍历的特点是左-根-右,产生的序列就是从小到大的序列,在遍历时利用递归方法寻找两个错误的节点即可Cpp实现/** * Definition for a binary tree node. * struct T...原创 2020-03-24 17:04:31 · 128 阅读 · 0 评论 -
LeetCode 100.相同的树
题目描述给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。解题思路利用递归判断当前节点的值是否相等,再递归判断两个树的左右子树是否相等遍历树的常用方法:先序遍历、层序遍历,这里选择先序遍历代码简单易实现运用层序遍历:利用队列Cpp实现/** * Definition for a binary tree no...原创 2020-03-19 13:45:38 · 118 阅读 · 0 评论 -
LeetCode 101.对称二叉树
题目描述给定一个二叉树,检查它是否是镜像对称的。解题思路递归:当两个节点有相同的值,并且每个树的左子树和另一个树的右子树镜像对称Cpp实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *ri...原创 2020-03-20 13:12:56 · 228 阅读 · 0 评论