为什么 TypeScript 是 LeetCode 的理想语言?
如果您至今还在用 JavaScript 解 LeetCode 题目——是时候转向 TypeScript 了。为什么?因为强类型在代码运行前就能排除一整类错误。您不会意外地将字符串传入期望数字的地方,编译器会自行提示对象有哪些可用方法。这就像驾驶一辆带自动驾驶的汽车——更快、更安全、更愉悦。
LeetCode 不仅仅是一个死记硬背算法的平台。它是一个训练场,让您磨练在生产环境中真正需要的技能。而如今 TypeScript 是企业级开发的事实标准。像 Google、Microsoft 和 Airbnb 这样的公司都在寻找能编写类型化代码的开发者。因此,用 TypeScript 解 LeetCode 题目,可谓一举两得:既为面试做准备,又提升了实际技能。
在本文中,我们将探讨从何入手、需要学习哪些类型和数据结构,并逐步解析 3 道不同难度的题目——从简单到困难。开始吧!
开始前需要了解什么
在跳入题海之前,请确保您已打好基础。TypeScript 是 JavaScript 的超集,因此首先需要熟练掌握 JS:闭包、Promise、数组方法、对象操作。没有这些,TypeScript 只会显得像多余的语法糖。
LeetCode 上常用的基本类型
number、string、boolean—— 基础,必不可少number[]、string[]—— 数组,90% 的题目都会用到Record<string, number>—— 作为字典(哈希映射)的对象Map<K, V>—— 对象的替代方案,保留顺序Set<T>—— 用于唯一值Tuple—— 元组,在需要返回一对值的题目中很有用null | undefined—— 处理边界情况
最常见的数据结构
- 数组 —— 基础中的基础。二维数组、排序、二分查找
- 哈希表 —— 用于快速查找(Two Sum 题目是经典)
- 栈和队列 —— 用于括号匹配、BFS、DFS 等题目
- 链表 —— 反转、合并、检测环
- 树 —— 二叉树、二叉搜索树、遍历
- 图 —— 通常在高级面试中出现
不要试图一次性学完所有内容。从数组和哈希表开始——这将覆盖 70% 的简单和中等难度题目。
如何在 LeetCode 上配置 TypeScript 环境
LeetCode 原生支持 TypeScript。选择语言时,只需在下拉菜单中点击 "TypeScript" 即可。但如果您想在本地编写代码并测试,以下是基本配置:
npm init -ynpm install typescript @types/node --save-devnpx tsc --init创建一个 solution.ts 文件,并通过命令 npx tsc solution.ts && node solution.js 运行编译。这将帮助您习惯强类型并实时捕获错误。
3 道 TypeScript 题目解析:从简单到困难
现在进入实践环节。我选择了三道能充分展示 TypeScript 能力且面试中常见的题目。
1. Two Sum(简单)—— 经典题型
题目:给定一个数字数组和一个目标值。需要找到两个数字,使其和等于目标值,并返回它们的索引。
function twoSum(nums: number[], target: number): number[] { const map = new Map<number, number>();
for (let i = 0; i < nums.length; i++) { const complement = target - nums[i]; if (map.has(complement)) { return [map.