Climbing Stairs(爬楼梯)问题解法最后一步逻辑疑惑咨询
爬楼梯问题核心逻辑答疑
你的疑问本质是混淆了「路径总数的统计规则」和「步数的累加规则」,我们先明确两个基础定义:
ways[i]的含义是从起点到达第(i+1)阶台阶的所有不同路径的总数量,统计的是有多少种走法,不是走了多少步- 每次从N-1阶走1步到N阶、或从N-2阶走2步到N阶,操作是在已有路径末尾追加固定的最后一步,不会改变原有路径的数量
我们拿实际场景举例就非常好理解:
以n=3的场景为例:
- 到达第1阶的路径总数是1种(直接走1步1阶),对应
ways[0]=1- 到达第2阶的路径总数是2种(两次1阶/一次2阶),对应
ways[1]=2- 要到第3阶:
- 所有到达第2阶的2种路径,每一种末尾追加走1步1阶,就能得到2种到第3阶的路径,数量还是2,不需要额外加1
- 所有到达第1阶的1种路径,末尾追加走1步2阶,就能得到1种到第3阶的路径,数量还是1,不需要额外加1
总路径数就是2+1=3种,完全符合递推公式的计算结果。
额外说明:你贴的代码存在一处排版笔误,for (int i=2; i < n; n++)中的迭代逻辑应该是i++,否则会触发死循环,属于代码转义粘贴时的失误。
内容的提问来源于stack exchange,提问作者Gustavo Palomino
相关产品推荐
相关产品推荐

