LeetCode 算法题解
LeetCode 算法题的 JavaScript 解决方案集合
📋 LeetCode 热门前 100 题完整列表
🔢 数组与字符串 (Array & String)
基础操作
- 两数之和 (Two Sum) - 简单
- 整数反转 (Reverse Integer) - 简单
- 回文数 (Palindrome Number) - 简单
- 罗马数字转整数 (Roman to Integer) - 简单
- 最长公共前缀 (Longest Common Prefix) - 简单
- 有效的括号 (Valid Parentheses) - 简单
- 合并两个有序链表 (Merge Two Sorted Lists) - 简单
- 删除有序数组中的重复项 (Remove Duplicates from Sorted Array) - 简单
- 移除元素 (Remove Element) - 简单
- 实现 strStr() (Implement strStr()) - 简单
双指针与滑动窗口
- 盛最多水的容器 (Container With Most Water) - 中等
- 三数之和 (3Sum) - 中等
- 最接近的三数之和 (3Sum Closest) - 中等
- 四数之和 (4Sum) - 中等
- 无重复字符的最长子串 (Longest Substring Without Repeating Characters) - 中等
- 最长回文子串 (Longest Palindromic Substring) - 中等
- Z 字形变换 (ZigZag Conversion) - 中等
- 字符串转换整数 (String to Integer) - 中等
- 外观数列 (Count and Say) - 简单
- 有效的数独 (Valid Sudoku) - 中等
数组排序与查找
- 寻找两个正序数组的中位数 (Median of Two Sorted Arrays) - 困难
- 搜索旋转排序数组 (Search in Rotated Sorted Array) - 中等
- 在排序数组中查找元素的第一个和最后一个位置 (Find First and Last Position of Element in Sorted Array) - 中等
- 搜索插入位置 (Search Insert Position) - 简单
- 组合总和 (Combination Sum) - 中等
- 组合总和 II (Combination Sum II) - 中等
- 第一个缺失的正数 (First Missing Positive) - 困难
- 接雨水 (Trapping Rain Water) - 困难
- 跳跃游戏 (Jump Game) - 中等
- 跳跃游戏 II (Jump Game II) - 中等
🔗 链表 (Linked List)
- 两数相加 (Add Two Numbers) - 中等
- 删除链表的倒数第 N 个结点 (Remove Nth Node From End of List) - 中等
- 合并 K 个升序链表 (Merge k Sorted Lists) - 困难
- 两两交换链表中的节点 (Swap Nodes in Pairs) - 中等
- K 个一组翻转链表 (Reverse Nodes in k-Group) - 困难
- 旋转链表 (Rotate List) - 中等
- 删除排序链表中的重复元素 (Remove Duplicates from Sorted List) - 简单
- 删除排序链表中的重复元素 II (Remove Duplicates from Sorted List II) - 中等
- 分隔链表 (Partition List) - 中等
- 反转链表 II (Reverse Linked List II) - 中等
🌳 树 (Tree)
- 二叉树的最大深度 (Maximum Depth of Binary Tree) - 简单
- 验证二叉搜索树 (Validate Binary Search Tree) - 中等
- 对称二叉树 (Symmetric Tree) - 简单
- 二叉树的层序遍历 (Binary Tree Level Order Traversal) - 中等
- 将有序数组转换为二叉搜索树 (Convert Sorted Array to Binary Search Tree) - 简单
- 平衡二叉树 (Balanced Binary Tree) - 简单
- 二叉树的最小深度 (Minimum Depth of Binary Tree) - 简单
- 路径总和 (Path Sum) - 简单
- 路径总和 II (Path Sum II) - 中等
- 二叉树的后序遍历 (Binary Tree Postorder Traversal) - 简单
🔍 深度优先搜索 (DFS)
- 电话号码的字母组合 (Letter Combinations of a Phone Number) - 中等
- 括号生成 (Generate Parentheses) - 中等
- 全排列 (Permutations) - 中等
- 全排列 II (Permutations II) - 中等
- 子集 (Subsets) - 中等
- 子集 II (Subsets II) - 中等
- 单词搜索 (Word Search) - 中等
- 岛屿数量 (Number of Islands) - 中等
- 被围绕的区域 (Surrounded Regions) - 中等
- 克隆图 (Clone Graph) - 中等
🔄 广度优先搜索 (BFS)
- 打开转盘锁 (Open the Lock) - 中等
- 完全平方数 (Perfect Squares) - 中等
- 单词接龙 (Word Ladder) - 困难
- 单词接龙 II (Word Ladder II) - 困难
- 课程表 (Course Schedule) - 中等
- 课程表 II (Course Schedule II) - 中等
- 最小高度树 (Minimum Height Trees) - 中等
- 重新安排行程 (Reconstruct Itinerary) - 困难
- 冗余连接 (Redundant Connection) - 中等
- 冗余连接 II (Redundant Connection II) - 困难
🎯 动态规划 (Dynamic Programming)
- 爬楼梯 (Climbing Stairs) - 简单
- 买卖股票的最佳时机 (Best Time to Buy and Sell Stock) - 简单
- 买卖股票的最佳时机 II (Best Time to Buy and Sell Stock II) - 中等
- 买卖股票的最佳时机 III (Best Time to Buy and Sell Stock III) - 困难
- 买卖股票的最佳时机 IV (Best Time to Buy and Sell Stock IV) - 困难
- 最大子序和 (Maximum Subarray) - 简单
- 乘积最大子数组 (Maximum Product Subarray) - 中等
- 打家劫舍 (House Robber) - 中等
- 打家劫舍 II (House Robber II) - 中等
- 打家劫舍 III (House Robber III) - 中等
🔢 数学 (Math)
- 加一 (Plus One) - 简单
- x 的平方根 (Sqrt(x)) - 简单
- Pow(x, n) (Pow(x, n)) - 中等
- 格雷编码 (Gray Code) - 中等
- 只出现一次的数字 (Single Number) - 简单
- 只出现一次的数字 II (Single Number II) - 中等
- 只出现一次的数字 III (Single Number III) - 中等
- 缺失数字 (Missing Number) - 简单
- 丑数 (Ugly Number) - 简单
- 丑数 II (Ugly Number II) - 中等
🎲 其他经典题目
- LRU 缓存 (LRU Cache) - 中等
- LFU 缓存 (LFU Cache) - 困难
- 设计循环队列 (Design Circular Queue) - 中等
- 设计循环双端队列 (Design Circular Deque) - 中等
- 设计推特 (Design Twitter) - 中等
- 设计哈希集合 (Design HashSet) - 简单
- 设计哈希映射 (Design HashMap) - 简单
- 设计最小栈 (Min Stack) - 简单
- 设计浏览器历史记录 (Design Browser History) - 中等
- 设计停车系统 (Design Parking System) - 简单
📖 题目分类
数组与字符串
- 两数之和、三数之和
- 无重复字符的最长子串
- 最长回文子串
- Z 字形变换
- 盛最多水的容器
链表操作
- 两数相加
- 删除链表的倒数第 N 个结点
- 合并两个有序链表
- 合并 K 个升序链表
- 两两交换链表中的节点
- K 个一组翻转链表
栈与队列
- 有效的括号
- 最长有效括号
- 括号生成
搜索与排序
- 寻找两个正序数组的中位数
- 搜索旋转排序数组
- 在排序数组中查找元素的第一个和最后一个位置
- 搜索插入位置
回溯算法
- 电话号码的字母组合
- 组合总和
- 组合总和 II
- 解数独
动态规划
- 最长回文子串
- 正则表达式匹配
数学问题
- 整数反转
- 字符串转换整数
- 回文数
- 外观数列
其他经典题目
- 下一个排列
- 有效的数独
🎯 学习建议
1. 按难度递进
- 从简单题目开始,逐步挑战中等和困难题目
- 每道题都要理解解题思路,不要只看代码
2. 掌握核心算法
- 双指针:解决数组、字符串问题
- 滑动窗口:处理子串、子数组问题
- 二分查找:在有序数组中快速查找
- 回溯算法:解决组合、排列问题
- 动态规划:优化递归,避免重复计算
- 栈和队列:处理括号匹配、单调栈问题
3. 代码规范
- 使用清晰的变量命名
- 添加必要的注释
- 分析时间和空间复杂度
- 考虑边界情况
4. 练习方法
- 先独立思考,尝试解题
- 如果卡住,查看解题思路
- 理解后自己重新实现
- 总结相似题目的解题模式
📊 复杂度分析
时间复杂度
- O(1):常数时间
- O(log n):对数时间(二分查找)
- O(n):线性时间(遍历)
- O(n log n):排序算法
- O(n²):嵌套循环
- O(2^n):指数时间(回溯)
空间复杂度
- O(1):常数空间
- O(n):线性空间(数组、栈)
- O(n²):二维数组
🔗 相关资源
📝 更新日志
- 2024年:创建 LeetCode 题解文档
- 包含热门前一百题的 JavaScript 解决方案
- 详细的解题思路和复杂度分析
开始你的算法学习之旅吧! 🚀
选择上面的任意一个文档开始学习,或者按照难度顺序逐步挑战。记住,算法学习是一个渐进的过程,保持耐心和持续练习是关键!