# 卡哥 Hot100 题解写作风格指南
基于对 0001.两数之和、0015.三数之和、0027.移除元素、0039.组合总和、0046.全排列、0077.组合、0053.最大子序和、0070.爬楼梯、0042.接雨水、0084.柱状图中最大的矩形、0101.对称二叉树、0102.二叉树的层序遍历、0020.有效的括号、0121.买卖股票的最佳时机、0072.编辑距离、0037.解数独、0051.N皇后、0131.分割回文串、0045.跳跃游戏II、0106.构造二叉树、0115.不同的子序列 等 20+ 篇题解的风格提炼。
# 一、Frontmatter 规范
---
description: 一句话概括题目+解法核心(不用太长,30-50字即可)
keywords:
- 题目关键词1
- 题目关键词2
- 算法名称
- 数据结构
tags:
- 算法分类
- 数据结构
title: "题号. 题目名称 | 算法1 | 算法2 | Hot100"
---
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 要点
- title 格式:
题号. 题目名 | 核心算法1 | 核心算法2 | Hot100,竖线分隔,Hot100 放最后 - description:简洁说明题目和核心解法,30-50字
- keywords:3-6个,覆盖题目名、算法名、数据结构名
- tags:2-4个,比 keywords 更宏观(如"哈希表""动态规划")
# 示例
title: "49. 字母异位词分组 | 哈希表 | Hot100"
title: "53. 最大子数组和 | 贪心 & 动态规划 | Hot100"
title: "128. 最长连续序列 | 哈希表 | Hot100"
1
2
3
2
3
# 二、文章结构(Hot100 版本)
Hot100 题解比主目录更精炼、更结构化,不需要广告 banner 和"算法公开课"板块。
# 标准结构
# 题号. 题目名称
[力扣题目链接](https://leetcode.cn/problems/xxx/)
## 题目描述
(题目文字、示例、提示)
## 思路
(核心解法讲解,循序渐进)
## 模拟过程
(用具体示例逐步演示算法流程,配图)
## 解题代码
(C++ 为主语言,带中文注释)
## 复杂度分析
## 其他语言
### Python3
### Java
### Go
### JS
## 与代码随想录联系
(关联主站相关题目和学习路径)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 结构说明
- 题目描述:直接从力扣原文摘录,包括题目、示例、提示,格式整洁
- 思路:核心讲解区,先抛问题再逐步分析(详见"思路写法"章节)
- 模拟过程:Hot100 特色板块,用具体数据一步步走算法,配图说明
- 解题代码:C++ 为主,注释精炼,用中文
- 复杂度分析:时间+空间,简洁一行
- 其他语言:Python3、Java、Go、JS,按此顺序
- 与代码随想录联系:Hot100 特色板块,引导回主站体系学习
# 三、思路写法
# 核心原则:先抛问题,逐步引导
不要上来就给答案,而是先让读者思考,再一步步分析。
# 推荐模式
模式A:暴力→优化(适合有暴力解的题目)
暴力解法是两层for循环,时间复杂度O(n²)。
但我们可以用xxx方法优化:
[分析为什么可以优化]
[引出最优解法]
1
2
3
4
5
2
3
4
5
模式B:特征→映射→数据结构(适合哈希/映射类题目)
本题本质是要[做什么]。
这就需要[某种映射/操作]。
想到映射,就应该想到[哈希表/某种数据结构]。
那么用什么样的[哈希表]呢?
[分析不同选择的优劣]
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
模式C:模板套用(适合回溯/DP类题目)
回溯三部曲:
1. 递归函数参数
2. 递归终止条件
3. 单层搜索逻辑
动规五部曲:
1. 确定dp数组及下标含义
2. 确定递推公式
3. dp数组初始化
4. 确定遍历顺序
5. 举例推导dp数组
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 思路中的关键手法
设问引导:先问"为什么""什么时候",再回答
- "什么时候需要startIndex呢?"
- "为什么会想到用哈希表?"
- "map中key和value分别表示什么?"
加粗关键结论:让读者一眼看到核心要点
- 本题还需要startIndex来控制for循环的起始位置
- 对总集合排序之后,如果下一层的sum已经大于target,就可以结束遍历
- 这道题目中并不需要key有序,选择std::unordered_map效率更高
关联前题:自然带出之前做过的相关题目,帮助建立体系
- "本题和77.组合、216.组合总和III的区别是……"
- "建议大家做这道题目之前,先做一下242.有效的字母异位词"
对比分析:不同方法/数据结构的对比
- "数组 vs set vs map"三种哈希法的适用场景
- "回溯法 vs 贪心法"的思路差异
# 四、模拟过程写法
这是 Hot100 题解的特色板块,用具体数据一步步走算法流程。
# 要点
- 选一个具体示例(优先用力扣给的示例1)
- 每一步写清楚当前状态
- 配图可以多张,不需要一张图讲完整个流程——把过程拆成多个阶段,每个阶段配一张图,逐步推进
- 文字描述和图片交替出现,图紧跟对应的文字说明
# 示例(49.字母异位词分组)
## 模拟过程如下:
eat 排序后为 aet,将 eat 放在 key 为 aet 的 map 中:
<img src='xxx.png' width=800>
tea 排序后为 aet,将 tea 放在 key 为 aet 的 map 中:
<img src='xxx.png' width=800>
……
最后,map 就根据 key,帮我们分门别类,将所有字符串按照字母异位词分组。
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 五、代码写法
# C++ 代码规范
- 用
class Solution包裹(力扣格式) - 注释用中文
- 注释精炼,只写"为什么"和"关键点",不写显而易见的"是什么"
- 关键行用行内注释
// 关键点:xxx
# 代码中的注释风格
// 好的注释(写为什么/关键点)
backtracking(candidates, target, sum, i); // 不用i+1了,表示可以重复读取当前的数
// 坏的注释(写显而易见的事)
backtracking(candidates, target, sum, i); // 调用回溯函数
1
2
3
4
5
2
3
4
5
// 好的注释(解释策略选择)
auto iter = map.find(target - nums[i]); // 遍历当前元素,在map中寻找是否有匹配的key
// 坏的注释(重复代码含义)
auto iter = map.find(target - nums[i]); // find target - nums[i]
1
2
3
4
5
2
3
4
5
# 其他语言
按 Python3 → Java → Go → JS 顺序排列,每个语言用 ### 三级标题。
代码块语言标记小写:```python、```java、```go、```javascript
# 六、语气与用词
# 称呼读者
- 用"录友"或"录友们",不用"同学们""大家""读者"
- 例:"很多录友把这道题目通过了,但都没想清楚map是用来做什么的"
# 口语化但不随意
- 允许口语化表达,但保持专业
- 好的:"吓得我赶紧想想出现0可咋办"
- 好的:"很明显暴力的解法是两层for循环"
- 避免过于正式:"综上所述""由此可见""不难发现"
# 语气特点
- 直接干练:不绕弯子,直接说重点
- 设问引导:用问题引发思考,而非直接灌输
- 自嘲幽默:偶尔有轻松的表达调节节奏
- 鼓励感:让读者觉得"我能理解"
# 典型句式
| 场景 | 句式 |
|---|---|
| 引出方法 | "那么就应该想到xxx了" |
| 强调关键 | "这一点很重要" / "注意xxx" |
| 设问引导 | "为什么会想到用xxx?" / "什么时候需要xxx呢?" |
| 对比前题 | "本题和xx.题名的区别是……" |
| 总结要点 | "想清楚以下几点,本题才算理解透彻" |
| 提醒易错 | "很多录友xxx,但其实xxx" |
| 鼓励读者 | "相信结合视频再看本篇题解,更有助于大家对本题的理解" |
# 七、图片规范
# 格式
使用 <img> 标签,不用 markdown 的 ![]() 语法:
<img src='https://file1.kamacoder.com/i/web/xxx.png' width=800>
1
# 配图原则
- 模拟过程可以多张图,不需要一张图讲完整个流程,把过程拆成多个阶段逐步推进
- 宽度统一
width=800 - 思路中的图,用于说明树形结构、流程、状态变化
- 每张图紧跟对应的文字说明
# 图片工作流
- 先画 drawio:在
docs/pics/algo/下创建.drawio文件,命名格式NNNN.题目关键词-说明.drawio - markdown 中先放 drawio 文件名占位,放在文章对应位置,等卡哥确认 drawio 内容
- 卡哥确认后:导出为 JPG → 上传卡码图床 → 用图床 URL 替换占位
- 最终格式:
<img src='https://file1.kamacoder.com/i/web/xxx.jpg' width=800>
# 八、"与代码随想录联系"写法
这是 Hot100 特色板块,目的是把 Hot100 题目和主站体系关联起来。
# 内容要点
- 说明本题对应主站哪个章节/哪道题
- 提供主站链接(用 .html 格式)
- 简要说明主站相关章节能学到什么
- 如果有相似思路的前题,列出关联
# 示例
## 与代码随想录联系
我在代码随想录哈希表章节里,详细讲解过,什么时候用数组,什么时候用set,什么时候用map。
如果想进一步学习,可以看一下[代码随想录哈希表章节](链接),刷前四节,就可以理解了。
同时大家在做这道题目的时候,一定会想到,代码随想录哈希表章节:[242.有效的字母异位词](链接)。
1
2
3
4
5
6
7
2
3
4
5
6
7
# 九、不同题型写作要点
# 哈希表题
- 先讲"为什么会想到哈希"(查询元素是否出现过)
- 再分析用什么哈希结构(数组 vs set vs map)
- 最后讲 key/value 怎么设计
# 双指针题
- 先讲暴力解法
- 分析为什么可以优化(单调性/有序性/对撞性质)
- 给出双指针的移动逻辑
# 回溯题
- 用"回溯三部曲"框架
- 画树形结构图
- 重点讲剪枝优化
- 对比和前题的差异(startIndex?used数组?)
# 动态规划题
- 用"动规五部曲"框架
- 重点讲dp数组含义和递推公式
- 用矩阵/表格图推导过程
- 分析初始化的合理性
# 贪心题
- 先讲"局部最优→全局最优"的思路
- 用反例说明为什么贪心有效
- 配图说明覆盖范围/跳跃过程
# 二叉树题
- 明确遍历方式(前中后序/层序)
- 画图说明递归过程
- 讲清楚递归函数的参数和返回值
# 单调栈题
- 先讲暴力解法
- 分析"单调性"是如何产生的
- 用柱状图/温度图模拟入栈出栈过程
# 十、写作检查清单
写完题解后,对照以下清单检查:
- [ ] Frontmatter 的 title 包含题号、题目名、核心算法、Hot100
- [ ] 有力扣题目链接
- [ ] 题目描述从力扣原文摘录,含示例和提示
- [ ] 思路部分有设问引导,不只给答案
- [ ] 关键结论用加粗
- [ ] 有模拟过程板块,配图逐步演示(可多张图,不必一张讲完)
- [ ] C++ 代码注释用中文,注释写"为什么"而非"是什么"
- [ ] 有复杂度分析
- [ ] 有其他语言版本(Python3/Java/Go/JS)
- [ ] 有"与代码随想录联系"板块
- [ ] 称呼读者用"录友"
- [ ] 图片用
<img>标签,width=800 - [ ] 先画 drawio 放
docs/pics/algo/,确认后再导出上传卡码图床
@2021-2026 代码随想录 版权所有
粤ICP备19156078号
评论
验证登录状态...