
LeetCode算法刷题
文章平均质量分 84
LeetCode算法
https://leetcode-cn.com/u/ciellee/
小馋喵星人
这个作者很懒,什么都没留下…
展开
-
【LeetCode #22 题解】 括号生成,四种解法(深度优先遍历算法、广度优先遍历算法、动态规划法)
【LeetCode #22 题解】 括号生成(深度优先遍历算法、广度优先遍历算法)* 题目1. 深度优先遍历算法实现 - 系统栈递归2. 深度优先遍历算法实现 - 栈3. 广度优先遍历算法实现 - 队列* 题目数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 :输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]1. 深度优先遍历算法实现 - 系统栈递归class Solutio原创 2021-02-25 18:03:24 · 525 阅读 · 0 评论 -
【LeetCode #47 题解】 带重复全排列 II(递归回溯法、非递归实现)
【LeetCode #47 题解】 带重复排列 II(递归回朔法、非递归实现)题目:题解一:非递归实现题解二:递归回朔法题目:题目链接: 《带重复排列 II》给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]题解一:非递归实现本题解思路主要如下:先对数组进行 从小到大排序。接着对它不停的求下排列,直到找不到下一排列为止。class Solution {public:原创 2020-10-25 12:31:21 · 467 阅读 · 0 评论 -
【LeetCode #46 题解】 全排列(递归回朔法、非递归实现)
【LeetCode #46 题解】 全排列(递归回朔法、深度遍历算法)题目题解一、递归回朔法题解二、Stack栈+深度遍历算法(非递归)题目给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]题解一、递归回朔法类似 树的中序遍历方法。命令行打印输出结果,和上面推导一样,我画成树后,如下: 交换 1原创 2020-10-15 18:21:09 · 645 阅读 · 0 评论 -
【LeetCode #31 题解】 下一个排列
题目题目链接:《31. 下一个排列》实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1分析思路这个题可以转换为,寻找下一个比它更大的数。例如,以 [1,5,8,4,7,6,5,3,1][ 1,5,8,4,7,6,5原创 2020-10-15 15:29:59 · 508 阅读 · 0 评论 -
【LeetCode】 高效算法刷题思路、算法题目分类 - 持续更新
刷 LeetCode 上的算法题对于掌握算法还是非常有在帮助的,但上面的题目太多太杂,如果不做以归类,有目的性的刷题,最终肯定会有些心得,但同时也会浪费大量的时间。但作为一个没刷多少题的 LeetCode 新手小白来说,对题目分类有点虚了。本文是参考网上已有的 LeetCode 高手,并且结合自身的情况,进行归整,希望归整出一份从㳀入深,适合自已的高效刷题方法。好,我们开始吧^_^算法分类1. 排序算法 2. 双指针 3. 字符串 4. 位运算原创 2020-10-15 11:22:00 · 3419 阅读 · 0 评论 -
【LeetCode #20 题解】 有效的括号(栈实现)
一、题目给定一个只包括'(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例:输入: "()" 输出: true输入: "()[]{}" 输出: true输入: "(]" 输出: false输入: "([)]" 输出: false输入: "{[]}" 输出: true代码实现:bool isValid(char原创 2020-09-29 18:29:18 · 286 阅读 · 0 评论 -
【LeetCode #19 题解】 删除链表的倒数第N个节点(快慢指针实现)
一、题目 & 题解给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明: 给定的 n 保证是有效的。代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct L原创 2020-09-29 17:26:20 · 323 阅读 · 0 评论 -
【LeetCode #18 题解】 四数之和
一、题目给定一个包含 nnn 个整数的数组 numsnumsnums 和一个目标值 targettargettarget,判断 numsnumsnums 中是否存在四个元素 a,b,c和da,b,c 和 da,b,c和d ,使得 a+b+c+da + b + c + da+b+c+d 的值与 targettargettarget 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target原创 2020-09-27 21:59:01 · 360 阅读 · 0 评论 -
【LeetCode #17 题解】 电话号码的字母组合
一、题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].二、题解解题思路:以 273 为例,其结果为:["apd","ape","apf","aqd","aqe","aqf","ard","are","arf","asd","ase","asf", "bpd",原创 2020-09-24 11:29:20 · 382 阅读 · 0 评论 -
【LeetCode #16 题解】 最接近的三数之和
一、题目给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 <= nums.length <= 10^3-10^3 <= nums[i] <= 10^3-10^4原创 2020-08-13 15:35:14 · 351 阅读 · 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]]二、题解思路为:当输入size < 3 时,直接返回空当输入size >=3时,分配内存 n * (原创 2020-08-13 11:34:36 · 357 阅读 · 0 评论 -
【LeetCode #14 题解】 最长公共前缀
一、题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""所有输入只包含小写字母 a-z 。二、题解char * longestCommonPrefix(char ** strs, int strsSize){ char *p, *result; int i, fla原创 2020-08-12 17:23:06 · 276 阅读 · 0 评论 -
【LeetCode #13 题解】 罗马数字转整数
一、题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如,罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。27 写做 XXVII, 即为 XX + V + II原创 2020-08-12 15:07:10 · 342 阅读 · 0 评论 -
【LeetCode #12 题解】 整数转罗马数字
【LeetCode #12 题解】 整数转罗马数字一、题目二、题解:最笨的方法,优先解析高位,代码最长三、题解:算法优化,优先解析低位一、题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如,罗马数字 2 写原创 2020-08-11 18:16:44 · 339 阅读 · 0 评论 -
【LeetCode #11 题解】 盛最多水的容器
一、题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例:输入:[1,8,6,2,5,4,8,3,7]输出:49二原创 2020-08-10 11:31:27 · 338 阅读 · 0 评论 -
【LeetCode #10 题解】 正则表达式匹配
一、题目给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例 2原创 2020-08-10 10:44:29 · 371 阅读 · 0 评论 -
【LeetCode #9 题解】 回文数
一、题目判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。进阶:你能不将整数转为字符串来解决这个问题吗?二、题解题目要求不能转为字串来解决,这样也比较简单,即将整原创 2020-07-17 16:43:07 · 289 阅读 · 0 评论 -
【LeetCode #8 题解】 字符串转换整数 (atoi)
一、题目:字符串转换整数 (atoi)请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符原创 2020-07-17 15:49:23 · 358 阅读 · 0 评论 -
【LeetCode #7 题解】 整数反转
【LeetCode #7 题解】 整数反转一、题目二、题解一、题目给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。二、题解int reverse(int x){ long原创 2020-07-09 17:09:57 · 352 阅读 · 0 评论 -
【LeetCode #6 题解】 Z 字形变换
@toc一、题目将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int原创 2020-07-09 16:21:55 · 440 阅读 · 0 评论 -
【LeetCode #5 题解】 最长回文子串
【LeetCode #5 题解】 最长回文子串一、题目二、题解一:暴力查找法三、题解二:一、题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"二、题解一:暴力查找法虽然可以解决问题,但该方法耗时太久,不可取。需要另找更快的方法// 题解一: 最笨的方法,暴力查找法,当字串很大时,leetcode原创 2020-07-08 18:20:41 · 373 阅读 · 0 评论 -
【LeetCode #4 题解】 寻找两个正序数组的中位数
【LeetCode #4 题解】 寻找两个正序数组的中位数一、题目二、题解:折半寻找第K小数法三、一、题目给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是原创 2020-07-07 18:23:07 · 907 阅读 · 0 评论 -
【LeetCode #3 题解】 无重复字符的最长子串
【LeetCode #3 题解】 无重复字符的最长子串一、题目二、题解:双指针暴力查找法 8ms 5.4M三、惊呆:双指针暴力查找法 优化后 4 ms ? 假的3.1 优化点1:指针赋值初始化,优化0.2M 内存四、hash 表实现一、题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字原创 2020-07-07 11:02:15 · 1183 阅读 · 0 评论 -
【LeetCode #2 题解】两数相加
【LeetCode #2 题解】两数相加一、题目二、笨方法题解(因为存在数据大小局限性,所以提交时报错误)2.1 测试结果(小数据时计算正常)2.2 测试结果(大数据时计算错误)三、正解(无局限性)一、题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4原创 2020-07-06 13:58:22 · 394 阅读 · 0 评论 -
【LeetCode #1 题解】两数之和
这里写自定义目录标题题目C 算法题解提交结果题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]C 算法题解/** * Note: The returned array mu原创 2020-07-06 13:47:47 · 911 阅读 · 0 评论