力扣解题
文章平均质量分 90
youngerwang
云峰竞渡
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【力扣Leetcode题解系列之0031—Next Permutation 下一个排列】
摘要 LeetCode第31题"下一个排列"要求对给定数字序列进行原地调整,找到字典序中紧邻的下一个更大的排列,若已达最大则返回最小排列。算法通过三步实现:1)从后向前找到第一个降序位置i;2)反转i+1到末尾;3)若i存在,交换i与后面第一个较大元素。该解法时间复杂度O(n),空间复杂度O(1),适用于全排列生成、搜索算法等场景。文中提供了Python、Java、C、C++和Go五种实现版本,并分析了算法复杂度、关键点和应用场景。原创 2025-07-28 16:48:22 · 1167 阅读 · 0 评论 -
【力扣Leetcode题解系列之0030—串联所有单词的子串】
摘要 该题目要求在一个字符串中查找所有由给定单词数组(所有单词长度相同)任意组合连接而成的子串的起始位置。主要解决方案是使用哈希表统计单词出现频率,然后滑动窗口遍历字符串进行匹配检查。实现展示了四种语言的解法:Python利用Counter类简化统计,Java使用HashMap,C语言实现自定义哈希表,C++采用unordered_map。算法时间复杂度为O(n*m),其中n是字符串长度,m是单词总长度。这种方法有效解决了字符串与单词组的匹配问题。原创 2025-07-25 18:03:42 · 1068 阅读 · 0 评论 -
【力扣Leetcode题解系列之0029—两数相除】
29.两数相除算法解析 核心思路 通过移位运算实现除法,避免使用乘除和取余运算。主要步骤:1)处理边界情况;2)确定结果符号;3)将被除数和除数转为正数;4)通过位操作实现快速减法,记录商值。 关键实现 使用位运算加速计算(左移相当于乘2) 处理INT_MIN/-1的溢出情况 通过异或运算确定结果符号 循环减去最大可能的倍数 复杂度 时间复杂度:O(logn),通过位运算加速 空间复杂度:O(1),仅使用常数空间 该算法巧妙利用位运算模拟除法,是考察位操作和边界处理的经典题目。原创 2025-07-25 17:53:05 · 1029 阅读 · 0 评论 -
【力扣Leetcode题解系列之0028— Implement strStr() 实现 strStr()】
摘要 LeetCode 28题要求实现字符串匹配函数strStr(),即在haystack中查找needle首次出现的位置,未找到则返回-1。本文提供了Python、Java、C、C++和Go的暴力匹配解法,均通过遍历haystack并逐字符比较实现。算法时间复杂度为O((M-N+1)*N),空间复杂度O(1)。关键点包括边界条件处理(如空needle返回0)和子串比较逻辑。扩展方向可涉及多位置匹配、模糊匹配或动态字符串场景。该问题在文本搜索、生物基因分析等领域有实际应用。原创 2025-07-25 11:16:28 · 1154 阅读 · 0 评论 -
【力扣Leetcode题解系列之0027—Remove Element 移除元素】
本文介绍了LeetCode上"移除元素"问题的解决方案。题目要求在原数组中移除所有等于给定值的元素,返回新数组长度。文章提供了Python、Java、C、C++和Go五种语言的实现代码,均采用双指针法,时间复杂度O(n),空间复杂度O(1)。关键点在于指针移动和元素交换逻辑的正确处理,同时需注意边界条件。扩展应用包括数据清洗、游戏开发和资源管理等场景。算法虽然简单,但能有效解决数组元素移除问题,是编程面试中的常见题目。原创 2025-07-25 11:12:13 · 625 阅读 · 0 评论 -
【力扣Leetcode题解系列之0026—Remove Duplicates from Sorted Array 删除有序数组中的重复项】
本文介绍了LeetCode简单题"删除有序数组中的重复项"的多种实现方法。题目要求原地修改有序数组,使每个元素只出现一次,并返回新长度。文章提供了Python、Java、C、C++和Go五种语言的解法,均采用双指针法,时间复杂度O(n),空间复杂度O(1)。关键点在于正确处理指针移动逻辑和边界条件。还讨论了扩展题目(如限制元素出现次数)和应用场景(如数据清理、数据库操作)。算法在保证正确性的同时追求简洁性,适合初学者理解双指针技巧。原创 2025-07-25 11:06:43 · 387 阅读 · 0 评论 -
【力扣Leetcode题解系列之0025— K 个一组翻转链表】
摘要 LeetCode 25题"K个一组翻转链表"要求将链表每k个节点为一组进行翻转,剩余不足k个的节点保持原序。常用解法包括迭代法和递归法。迭代法通过创建哑节点简化边界处理,遍历链表并对每组k个节点进行反转,调整指针连接各组。递归法则将问题分解为子问题,先处理第一组k个节点,再递归处理剩余链表。本文提供了Python、Java、C和C++四种语言的实现代码,展示了如何通过指针操作实现链表分组翻转。该题考察链表操作能力,时间复杂度为O(n),空间复杂度为O(1)(迭代法)或O(n/k)(原创 2025-07-23 16:12:36 · 683 阅读 · 0 评论 -
【力扣Leetcode题解系列之0024—两两交换链表中的节点】
摘要 力扣第24题要求两两交换链表中的相邻节点,不修改节点值,返回交换后的链表头。常用解法包括: 迭代法:使用虚拟头节点和三个指针(prev、curr、nextNode)逐步调整节点指向,统一处理边界条件。 递归法:若链表至少有两个节点,交换头两个节点后递归处理剩余链表,代码简洁但需注意终止条件(链表为空或仅一个节点)。 多语言实现(Python/Java/C/C++)均遵循上述逻辑,迭代法通过循环调整指针,递归法则分解问题。时间复杂度为O(n),空间复杂度迭代法O(1),递归法O(n)(栈空间)。原创 2025-07-23 16:01:21 · 1595 阅读 · 0 评论 -
【力扣Leetcode题解系列之0023—Merge k Sorted Lists 合并K个升序链表】
本文分析了合并K个有序链表的三种解法:暴力法(每次遍历最小值)、小根堆保存索引、小根堆直接保存节点。重点比较了各方法的时间复杂度,暴力法为O(N*k),堆优化法为O(N log k)。提供了Python、Java、C++和Go的多语言实现,其中Python包含三种解法,其他语言采用最优的堆优化方案。特别指出Python3中节点对象比较的限制,需注意实现差异。所有代码均给出完整链表定义和解决方案。原创 2025-07-23 11:06:19 · 785 阅读 · 0 评论 -
【力扣Leetcode题解系列之0022—Generate Parentheses 括号生成】
摘要:本文分析了生成n对合法括号组合的问题,介绍了回溯法作为主要解法,通过递归和剪枝条件确保生成所有有效组合。提供了Python、Java、C++和Go四种语言的实现代码,并分析了算法的时间复杂度(O(4^n/√n))和空间复杂度。重点讨论了递归逻辑、状态跟踪和剪枝条件等关键点,同时提出了两个扩展题目:生成多种类型括号组合和带权重的括号组合,展示了问题变体的解决思路和示例代码。原创 2025-07-23 10:30:55 · 1054 阅读 · 0 评论 -
【力扣Leetcode题解系列之0021—Merge Two Sorted Lists 合并两个有序链表】
链表操作的核心要点:合并有序链表问题涵盖了链表操作的多个核心要点,包括节点的比较、指针的移动和链表的拼接。通过解决这类问题,我们深入理解了链表数据结构的特性以及如何灵活运用指针来实现复杂的操作。无论是迭代还是递归的方法,都需要精确控制指针的指向和移动,确保链表结构的完整性和正确性。算法设计的灵活性:本题的多种解法以及扩展题目展示了算法设计的灵活性。迭代法直观且易于理解,递归法简洁明了,能够体现问题的递归本质。在面对不同的问题场景时,我们需要根据具体需求选择合适的解法。原创 2025-07-23 10:11:23 · 1037 阅读 · 0 评论 -
【力扣Leetcode题解系列之0020—有效的括号】
本文介绍了判断括号有效性的经典栈解法,通过Python、Java、C、C++和Go五种编程语言实现。核心思路是利用栈结构匹配括号对,时间复杂度O(n),空间复杂度O(n)。关键点包括正确使用栈操作、处理边界条件和字符匹配逻辑。文章还分析了实现难点,并提出了支持更多括号类型的扩展题目,为理解括号匹配问题提供了多语言实现方案和算法分析。原创 2025-07-22 16:42:24 · 1130 阅读 · 0 评论 -
【力扣Leetcode题解系列之0019—Remove Nth Node From End of List 删除链表的倒数第 N 个结点】
本文介绍了删除链表倒数第N个节点的常见解法——双指针法,并提供了Python、Java、C、C++和Go五种语言的实现代码。该算法通过引入哑节点和快慢指针,在O(L)时间复杂度和O(1)空间复杂度内解决问题,其中L为链表长度。关键点在于哑节点的使用确保删除操作的一致性,以及指针同步移动的准确性。文章还分析了算法复杂性和实现难点,并提出了两个扩展题目:删除倒数第k到m个节点和删除特定值的倒数第n个节点,为读者提供了进一步的思考方向。原创 2025-07-22 16:33:03 · 1422 阅读 · 0 评论 -
【力扣Leetcode题解系列之0018—4Sum 四数之和】
《四数之和问题:多语言实现与优化》摘要: 本文探讨了LeetCode第18题"四数之和"的解决方案。通过排序预处理和多指针技术,将时间复杂度从O(n⁴)优化至O(n³)。核心算法采用双层循环确定前两个数,内层使用双指针寻找后两个数,并配合严格的去重机制保证结果唯一性。文章提供了Python、Java和C三种语言的完整实现:Python使用嵌套while循环处理指针移动和去重;Java利用ArrayList存储结果并实现类似逻辑;C版本则通过动态内存分配和qsort排序处理数组。各实现均遵原创 2025-07-22 16:10:14 · 1554 阅读 · 0 评论 -
【力扣Leetcode题解系列之0017— Letter Combinations of a Phone Number 电话号码的字母组合】
摘要: 本文探讨了电话号码字母组合问题的多种解法与实现。题目要求根据数字2-9的字符串生成电话键盘对应的所有字母组合。主要解法包括: 回溯法:通过递归尝试所有字母组合路径,完成组合后回溯,适用于穷举场景 递归法:类似回溯但更简洁,利用函数栈保存状态 内置函数法(Python):使用itertools.product计算笛卡尔积,代码最简洁 循环法:通过迭代拼接字符串,避免递归开销 文章提供了Python、Java和C++的实现代码,展示了不同语言下的解决方案。原创 2025-07-20 11:42:00 · 1045 阅读 · 0 评论 -
【力扣Leetcode题解系列之0016—3Sum Closest 最接近的三数之和】
本文介绍了"最接近的三数之和"问题的解法,重点分析了排序+双指针法。该方法先对数组排序,然后固定一个元素,使用双指针在剩余元素中寻找最接近目标值的组合。文章提供了Python、Java、C、C++和Go五种语言的实现代码,算法时间复杂度为O(n²),空间复杂度O(1)。实现关键在于排序预处理和双指针的高效移动策略,通过比较和与目标值的关系来调整指针位置,从而快速找到最优解。原创 2025-07-20 10:41:25 · 1086 阅读 · 0 评论 -
【力扣Leetcode题解系列之0012——Integer to Roman 整数转罗马数字】
本文全面解析了将整数转换为罗马数字的算法问题。文章首先介绍了罗马数字的基本规则和特殊减法情况,然后详细讲解了贪心算法的解法思路及其优势。提供了五种编程语言的实现代码,并分析了算法的时间复杂度(O(1))和空间复杂度(O(1))。此外,文章提出了三个扩展题目方向:支持更大范围的转换、实现双向转换以及处理带条件的转换,增加了问题的挑战性。最后说明了该算法在历史研究、排版编号和密码学等领域的实际应用价值。全文内容系统全面,既适合算法初学者理解基础解法,也为进阶学习者提供了扩展思路。原创 2025-07-18 13:11:22 · 896 阅读 · 0 评论 -
【力扣Leetcode题解系列之0015—Sum 三数之和】
三数之和问题解法总结 本文分析了两类解决三数之和(3Sum)问题的算法方案: 排序+双指针法:核心思路是先排序数组,然后固定一个元素,使用双指针在剩余部分寻找满足条件的组合。时间复杂度为O(n²),空间复杂度O(1),是最高效的解法。 统计频率+双指针法:通过哈希表统计元素频率,处理重复元素情况。虽然时间复杂度也是O(n²),但实现较复杂,需要额外空间存储频率信息。 文章提供了Python和Java的完整实现代码,展示了两种方法的具体应用。其中排序+双指针法更为推荐,因其效率高且实现简洁。两种方法都强调了对原创 2025-07-18 13:05:32 · 1123 阅读 · 0 评论 -
【力扣Leetcode题解系列之0014—Longest Common Prefix 最长公共前缀】
本文介绍了求解字符串数组最长公共前缀的多种解法及其多语言实现。主要方法包括:1)遍历前缀子串法,逐个检查公共前缀;2)利用集合特性判断公共前缀;3) 基于最短字符串遍历比较;4)排序后比较首尾字符串。文章提供了Python、Java和C语言的实现代码,展示了不同语言下的解决方案。这些方法各有优缺点,适用于不同场景,其中遍历最短字符串和排序法相对高效。原创 2025-07-18 13:04:02 · 425 阅读 · 0 评论 -
【力扣Leetcode题解系列之0013— Roman to Integer 罗马数字转整数】
本文介绍了将罗马数字转换为整数的多种实现方法。题目要求将七个罗马数字符号(I、V、X、L、C、D、M)按特定规则转换为1-3999范围内的整数。文章提供了两种核心解法:从后向前遍历法和从前向后遍历法,并展示了Python、Java、C、C++和Go五种语言的实现示例。算法分析指出时间复杂度为O(n),空间复杂度为O(1)。关键难点在于正确处理罗马数字的减法规则。文章还提出了三个扩展题目:支持扩展罗马数字表示、处理无效输入以及带上下文的转换,并列举了历史研究、艺术建筑和钟表设计等实际应用场景。原创 2025-07-18 13:00:25 · 1058 阅读 · 0 评论 -
【力扣Leetcode题解系列之0011—Container With Most Water 盛最多水的容器:多语言实现与拓展】
本文介绍了LeetCode中"盛最多水的容器"和"整数转罗马数字"两道题目的解法与拓展。 对于"盛最多水的容器"问题,重点分析了双指针法的解题思路,该方法通过左右指针向中间移动的策略,将时间复杂度优化至O(n)。文章提供了Python、Java、C、C++和Go五种语言的实现代码,并进行了算法复杂度分析。此外还提出了三维容器、可变挡板高度等扩展问题,以及资源分配、图像处理等实际应用场景。原创 2025-07-18 12:58:27 · 722 阅读 · 0 评论 -
【力扣Leetcode题解系列之0010——正则表达式匹配:多语言实现、分析与拓展】
本文分析了力扣第10题正则表达式匹配的多种解法。文章首先介绍了题目要求,即实现支持'.'和'*'的正则匹配功能。随后提供了递归和动态规划两种解法思路,并给出了Python、Java、C、C++、Go五种语言的递归实现代码。在算法分析部分,对比了递归解法(O(2^(m+n)))和动态规划解法(O(mn))的时间复杂度差异。最后文章提出了三个扩展方向:支持字符类匹配、区间匹配和带条件匹配,并列举了正则表达式在文本处理、编译器和数据验证中的应用场景。全文通过多角度解析帮助读者全面掌握正则匹配的实现原理和应用技巧。原创 2025-07-17 14:47:23 · 572 阅读 · 0 评论 -
【力扣Leetcode题解系列之0009—Palindrome Number 回文数:深入剖析与拓展】
摘要: 本文详细解析了力扣第9题「回文数」的两种解法:字符串转换法和数字翻转法。字符串法通过比较字符判断回文,时间复杂度O(log₁₀n),空间复杂度O(log₁₀n);数字翻转法通过数学运算反转数字,空间优化至O(1)。文章还提供了Python/Java/C/C++/Go多语言实现,并拓展了判断任意进制回文数的问题,建议处理负数、进制转换和字符比较。两种解法中翻转数字法更优,尤其适合限制空间的情况。原创 2025-07-17 14:35:25 · 707 阅读 · 0 评论 -
【力扣Leetcode题解系列之0008—String to Integer (atoi):字符串转换整数 (atoi) 解题攻略】
本文介绍了力扣第8题“字符串转换整数(atoi)”的解题方法。题目要求实现一个类似C/C++中atoi的函数,将字符串转换为32位有符号整数。解题需处理以下关键点:去除前导空格、判断正负号、提取连续数字字符并进行边界检查。文章提供了Python正则表达式法和常规遍历法两种解法,并给出了Python、Java、C、C++四种语言的代码实现。正则表达式法简洁高效,而常规遍历法则更直观地展现了处理流程。两种方法都需要注意32位整数的溢出问题,当结果超出[-2^31, 2^31-1]范围时返回对应的边界值。原创 2025-07-17 11:42:21 · 885 阅读 · 0 评论 -
【力扣Leetcode题解系列之0007—— Reverse Integer:整数反转解题全析】
题目摘要 力扣第7题"Reverse Integer"要求反转32位有符号整数。本文详细解析两种解题方法:字符串转换法和纯数学法。字符串法通过类型转换和反转字符串实现,纯数学法通过循环取模运算处理数字位。两种方法均需处理边界条件,确保结果在32位整数范围内(-2147483648到2147483647),否则返回0。文章提供了P/J/C/C++/G五种语言的完整代码实现,并分析了算法的时间复杂度和空间复杂度。最后还提出进阶问题,建议处理64位整数反转以t拓展解题思路。原创 2025-07-17 10:54:14 · 936 阅读 · 0 评论 -
【力扣Leetcode题解系列之0006——Zigzag Conversion:Z 字形变换解题攻略】
摘要: 力扣6题"Z字形变换"要求将字符串按Z形排列后按行读取。通过推导字符位置规律(首尾行固定间隔、中间行交替间隔),给出了Python、Java、C、C++和Go的实现方案。算法时间复杂度O(n),空间复杂度O(1)。该题考察逻辑思维与规律发现能力,通过多语言实现展示了通用解法,并可通过调整行数扩展题目难度。原创 2025-07-17 10:37:38 · 869 阅读 · 0 评论 -
【力扣Leetcode题解系列之0001——两数之和Two Number Sum】
本文介绍了LeetCode经典问题"两数之和"的解法。题目要求在数组中找到两数之和等于目标值,并返回其下标。最优解法是哈希表法,通过边遍历边存储的方式,时间复杂度为O(n),空间复杂度O(n)。文章提供了Python、Java、C、C++和Go的实现代码,并探讨了扩展问题:当数组有序时可使用双指针法优化;还延伸到三数之和、海量数据处理等变种问题。哈希表法是解决此类问题的通用高效方法,而扩展问题则需要结合排序、双指针等技巧处理去重和优化。原创 2025-07-16 10:24:38 · 680 阅读 · 0 评论 -
【力扣:Leetcode题解系列之0005. Longest Palindromic Substring:最长回文子串解题全析】
本文全面解析了力扣第5题"最长回文子串"的三种解法:暴力遍历(O(n³))、动态规划(O(n²))和马拉车算法(O(n))。通过Python、Java、C++等语言实现,详细分析了各方法的时间空间复杂度。暴力法简单直接但效率低;动态规划利用子问题优化;马拉车算法则在线性时间内解决问题。文章还提供了代码示例,帮助理解不同解法的优劣,为处理类似回文问题提供了清晰的解题思路。原创 2025-07-16 16:59:19 · 1080 阅读 · 0 评论 -
【力扣Leetcode题解系列之0004. Median of Two Sorted Arrays:寻找两个正序数组的中位数解题攻略】
本文介绍了力扣算法题"Median of Two Sorted Arrays"的解题方法。给定两个正序数组,要求在O(log(m+n))时间复杂度内找到它们的中位数。核心思路是使用二分查找,通过合理划分两个数组的位置,使得左半部分元素都小于右半部分。文章提供了C++和Go两种语言的实现代码,并分析算法的时间复杂度为O(log(m+n)),空间复杂度为O(1)。该解法充分利用二分查找的高效性,是解决这类问题的经典方法。原创 2025-07-16 16:22:45 · 523 阅读 · 0 评论 -
【力扣Leetcode题解系列之0003. Longest Substring Without Repeating Characters 解题全析】
本文详细解析了力扣第3题“无重复字符的最长子串”的两种高效解法:滑动窗口法和一次遍历字典法。滑动窗口法通过双指针维护无重复字符区间,时间复杂度O(n);字典法记录字符位置实现单次遍历,同样O(n)复杂度。文章提供了Python、C++和Go三种语言的实现代码,并分析了算法的时间与空间复杂度。该题考察字符串处理与数据结构运用能力,是算法学习的经典范例。原创 2025-07-16 15:57:19 · 935 阅读 · 0 评论 -
【力扣Leetcode解题系列之0002. 两数之和Add Two Numbers:链表与数学运算的完美结合】
力扣2题"Add Two Numbers"是一道经典的链表加法问题,要求将两个逆序存储数字的链表相加并返回结果链表。解题关键在于模拟十进制加法过程,处理不同长度链表和进位问题。主要有两种解法:循环法和递归法。循环法通过遍历链表逐位相加,处理进位;递归法则通过递归调用处理后续节点和进位。两种方法的时间复杂度均为O(max(M,N)),空间复杂度为O(1)。题目考察了链表操作和数学运算的结合能力,是算法练习的典型范例。原创 2025-07-16 15:22:14 · 831 阅读 · 0 评论
分享