用 LeetKick 从零开始刷 LeetCode:一份写给忙碌工程师的实战笔记
配图:键盘与咖啡,寓意“边工作边刷题”
为什么要再谈刷题工具?
很多工程师把 LeetCode 当成“面试刑场”,却忽略了它作为“日常代码健身房”的价值。
只要流程足够轻,刷题就能像写单元测试一样自然:
-
不必反复登录网页复制黏贴; -
不必为每个题手写目录和测试框架; -
不必在 GitHub 上维护一堆零散仓库。
LeetKick 把这三件琐事自动化,让你把注意力放回算法本身。下面这份笔记,记录了我自己在生产环境中用 LeetKick 刷题的全过程:安装、配置、实战、踩坑、再到贡献代码。它不会承诺“七天进大厂”,但能保证你今天的 30 分钟刷题时间不被浪费。
1. 工具速览:LeetKick 到底帮你做了什么?
一句话总结:LeetKick 是一个命令行工具,帮你把 LeetCode 上的题目一键拉到本地,附带语言专属的测试环境,写完直接跑测试即可。
能力 | 过去的手动做法 | LeetKick 的做法 |
---|---|---|
获取题目 | 打开网页 → 复制标题、描述、示例 | leetkick fetch two-sum -l typescript |
创建目录 | 自己建文件夹、命名、写 README | 自动按语言/题号创建 |
测试环境 | 安装 Jest、写配置文件 | 零配置,Node 自带测试框架 |
运行测试 | 切目录、敲 npm test |
在项目根目录 leetkick test two-sum |
2. 安装:两条路线,按需选择
配图:整洁的终端界面
2.1 路线 A:npm 全局安装(推荐)
前提:电脑里已有 Node.js 18 或以上版本。
npm install -g leetkick
leetkick --help # 看到帮助即成功
2.2 路线 B:源码编译(想参与贡献的人看这里)
git clone https://github.com/charliesbot/leetkick.git
cd leetkick
npm install # 安装依赖
npm run compile # 把 TS 编译成 JS
npm link # 把本地包注册成全局命令
之后,leetkick
命令在任何目录都能用。
3. 五分钟上手:一条命令一个题
3.1 初始化工作区
mkdir my-practice && cd my-practice
leetkick init
执行完会出现:
-
.leetkick.json
—— 工作区配置文件 -
README.md
—— 项目级说明 -
.gitignore
—— 排除 node_modules 等
3.2 添加语言支持
目前 TypeScript 最成熟,Python、Java、Go、Rust 还在路上。
leetkick add typescript
目录里会多出一个 typescript/
文件夹,内部自带:
-
package.json -
tsconfig.json -
Prettier 配置 -
针对题级的 .gitignore
3.3 拉取第一道题
leetkick fetch two-sum --language typescript
控制台输出大致如下:
✔ Fetched problem #1 Two Sum
✔ Generated typescript/0001_two_sum/two_sum.ts
✔ Generated typescript/0001_two_sum/two_sum.test.ts
配图:自动生成目录结构
3.4 打开文件,写代码
two_sum.ts
已经帮你写好了函数签名:
export function twoSum(nums: number[], target: number): number[] {
// Your solution here
}
把双指针或哈希解法填进去即可。
3.5 跑测试
回到项目根目录,无需 cd 进子文件夹:
leetkick test two-sum --language typescript
第一次运行时,工具会提示你添加真正的断言。
把 two_sum.test.ts
里的占位符替换为:
import test from 'node:test';
import assert from 'node:assert';
import { twoSum } from './two_sum.ts';
test('twoSum', () => {
assert.deepStrictEqual(twoSum([2, 7, 11, 15], 9), [0, 1]);
assert.deepStrictEqual(twoSum([3, 2, 4], 6), [1, 2]);
});
再跑一次,绿色对勾出现,题目通关。
4. 日常节奏:如何把刷题融入工作流
4.1 目录约定
my-practice/
├── typescript/
│ ├── 0001_two_sum/
│ ├── 0704_binary_search/
│ └── ……
├── python/ # 未来可用
└── java/ # 未来可用
-
题号前缀保证排序直观; -
每个文件夹独立,可随时删除重做; -
根目录 .gitignore
已经帮你忽略编译产物,直接git push
即可备份。
4.2 三种“叫车”方式
LeetKick 支持模糊匹配,减少记忆负担:
输入示例 | 匹配规则 |
---|---|
leetkick test 1 |
题号 |
leetkick test two-sum |
URL slug |
leetkick test 0001_two_sum |
精确目录名 |
4.3 与 Git 联动
把刷题仓库推送到 GitHub,每天一个 commit message:
git add .
git commit -m "solve(0001): two sum with hash map"
git push
既备份,也方便面试时展示。
5. 进阶:贡献一门新语言
配图:多人协作
如果你擅长 Python 或 Rust,完全可以把模板补全,让社区受益。官方预留了扩展机制,只需四步:
5.1 准备模板目录
mkdir -p templates/python
5.2 写模板文件
-
exercise_template.py
-
test_template.py
-
requirements.txt
-
pytest.ini
模板里可以用占位符,例如:
"""
[__PROBLEM_ID__] __PROBLEM_TITLE__
__PROBLEM_DESC__
Difficulty: __PROBLEM_DIFFICULTY__
"""
__PROBLEM_DEFAULT_CODE__
LeetKick 会在生成文件时自动替换。
5.3 注册文件扩展名
在源码 src/utils/file-operations.ts
中,把 python 的 key 填进去:
extensions: {
typescript: 'ts',
python: 'py',
}
5.4 本地验证
npm run compile
npm link
leetkick fetch two-sum --language python
如果目录、依赖、测试都能跑通,即可提 Pull Request。
6. 踩坑与答疑
6.1 Node 版本过低
报错 ERR_REQUIRE_ESM
或 Cannot find module 'node:test'
时,八成是 Node < 18。
用 nvm 切到 18 以上即可:
nvm install 18
nvm use 18
6.2 想覆盖旧题
默认 CLI 会提示“文件已存在”。
如果确认重写,加 --force
:
leetkick fetch two-sum -l typescript --force
6.3 Windows PowerShell 终端乱码
把终端字体换成 Consolas
或 Fira Code
,再执行:
chcp 65001
7. 真实案例:两周做完《剑指 Offer》66 题
配图:进度条
我给自己定了“早晚各一题”的节奏:
-
早上通勤地铁,用手机远程仓库拉题; -
晚上回家 30 分钟写代码、跑测试、push。
LeetKick 把环境摩擦降到几乎为零,两周后 66 个文件夹整整齐齐,测试全部绿灯。
面试复盘时,直接把 GitHub 链接甩给面试官,比现场写伪代码更直观。
8. 小结:别让“环境搭建”消磨刷题意志
LeetKick 不是魔法,它只是把重复劳动自动化,让你把注意力放在算法思维本身。
如果你:
-
想用 TypeScript 快速验证思路; -
想把刷题记录纳入日常 Git 工作流; -
想为下一种语言贡献模板;
那么 LeetKick 值得一试。
安装只需一条命令,上手只需五分钟,剩下的时间,留给思考和代码。
附录:命令速查表
目标 | 命令 |
---|---|
创建工作区 | leetkick init [目录名] |
添加语言 | leetkick add typescript |
拉题 | leetkick fetch <题号或slug> -l typescript |
测试 | leetkick test <题号或slug> -l typescript |
强制覆盖 | --force |
配图:命令速查表壁纸
祝你刷题愉快,代码长青。