1. LeetCode 815 公交路线问题解析
这道题目描述了一个典型的公共交通换乘问题:给定若干公交线路及其停靠站点,我们需要计算从起点站到终点站所需乘坐的最少公交车数量。每次换乘都算作新乘坐一辆公交车。
问题的核心在于理解公交网络的数据结构:
- 每条公交线路(routes[i])是一个站点序列
- 同一个站点可能被多条线路共享(换乘点)
- 我们需要找到从source到target的路径,使得换乘次数最少
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路与算法选择
2.1 为什么选择BFS算法
广度优先搜索(BFS)是解决最短路径问题的经典算法。在这个场景中:
- 我们需要找到最少换乘次数,对应BFS的最短路径特性
- 公交网络可以自然地建模为图结构
- BFS能够保证第一次到达目标站点时的路径就是最优解
注意:虽然DFS也可以找到解,但无法保证是最优解,且在最坏情况下效率远低于BFS。
2.2 关键数据结构设计
为了高效实现算法,我们需要两个核心数据结构:
-
站点到公交线路的映射表(stopToBuses):
- 键:站点ID
- 值:经过该站点的所有公交线路列表
- 作用:快速查找从当前站点可以换乘哪些公交
-
访问标记数组(visitedBus):
- 记录已经乘坐过的公交线路
- 避免重复计算和无限循环
- 显著提升算法效率
3. Java实现详解
3.1 代码结构与初始化
java复制import java.util.*;
class Solution {
public int numBusesToDestination(int[][] routes, int source, int target) {
if (source == target) return 0;
// 建立站点到公交线路的映射
Map<Integer, List<Integer>> stopToBuses = new HashMap<>();
for (int bus = 0; bus < routes.length; bus++) {
for (int st
