用 LeetKick 从零开始刷 LeetCode:一份写给忙碌工程师的实战笔记

配图:键盘与咖啡,寓意“边工作边刷题”
coffee-and-code


为什么要再谈刷题工具?

很多工程师把 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. 安装:两条路线,按需选择

配图:整洁的终端界面
terminal

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

配图:自动生成目录结构
folder-tree

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. 进阶:贡献一门新语言

配图:多人协作
team

如果你擅长 Python 或 Rust,完全可以把模板补全,让社区受益。官方预留了扩展机制,只需四步:

5.1 准备模板目录

mkdir -p templates/python

5.2 写模板文件

  1. exercise_template.py
  2. test_template.py
  3. requirements.txt
  4. 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_ESMCannot 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 终端乱码

把终端字体换成 ConsolasFira Code,再执行:

chcp 65001

7. 真实案例:两周做完《剑指 Offer》66 题

配图:进度条
progress

我给自己定了“早晚各一题”的节奏:

  • 早上通勤地铁,用手机远程仓库拉题;
  • 晚上回家 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

配图:命令速查表壁纸
cheat-sheet


祝你刷题愉快,代码长青。