题解模板说明

一句话说明

题解模板的目标不是把内容写长,而是把“题目本质、状态定义、为什么这么做、Go 实现”讲清楚。

推荐题解结构

# [题号] 题目名称
 
**难度**:简单 / 中等 / 困难
**标签**:#数组 #动态规划 #二分查找
 
## 题目本质
 
- 这题到底在考什么
- 为什么第一反应该想到这个算法
 
## 核心思路
 
- 关键观察
- 状态定义 / 不变量
- 转移或决策过程
 
## Go 代码
 
```go
// 只保留当前题真正需要的核心实现

易错点

  • 边界条件
  • 去重 / 下标 / 溢出

复杂度

  • 时间复杂度:
  • 空间复杂度:

## 推荐写法

### 1. 先说题目本质

不要一上来就贴代码。  
先回答:

- 这题本质是搜索、DP、贪心还是数据结构维护
- 为什么暴力不行
- 为什么当前解法成立

### 2. 代码只保留主解法

题解不是代码垃圾场。  
如果暴力解法没有教学价值,可以只保留:

- 最推荐的做法
- 一段 Go 代码

### 3. 易错点单独列

很多题真正难的地方不在主思路,而在:

- 边界条件
- 去重
- 下标转换
- 状态更新顺序

这些最好单独写出来。

## Go 题解示例骨架

```go
func solve(nums []int) int {
    // 1. 边界处理
    if len(nums) == 0 {
        return 0
    }

    // 2. 状态初始化
    answer := 0

    // 3. 主逻辑
    for _, x := range nums {
        _ = x
    }

    // 4. 返回答案
    return answer
}

一个简化示例:两数之和

题目本质

不是枚举,而是:

对每个数,快速判断 target-num 是否已经出现过

Go 代码

func twoSum(nums []int, target int) []int {
    seen := map[int]int{}
    for i, num := range nums {
        if j, ok := seen[target-num]; ok {
            return []int{j, i}
        }
        seen[num] = i
    }
    return nil
}

易错点

  • 返回的是下标,不是数值
  • 不能先把当前值放进哈希表再查自己

写题解时优先回答的问题

  1. 这题最自然的状态定义是什么?
  2. 这题为什么不是别的算法?
  3. 代码里最容易错的 1-2 个点是什么?

相关页面


返回:LeetCode题解