<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>爬楼梯 on Jeanphilo Blog</title><link>https://shio-chan-dev.github.io/jeanblog/zh/tags/%E7%88%AC%E6%A5%BC%E6%A2%AF/</link><description>Recent content in 爬楼梯 on Jeanphilo Blog</description><generator>Hugo -- 0.161.1</generator><language>zh-cn</language><lastBuildDate>Sun, 03 May 2026 14:33:39 +0800</lastBuildDate><atom:link href="https://shio-chan-dev.github.io/jeanblog/zh/tags/%E7%88%AC%E6%A5%BC%E6%A2%AF/index.xml" rel="self" type="application/rss+xml"/><item><title>LeetCode 70：爬楼梯，从 dp[i] 含义推出一维 DP</title><link>https://shio-chan-dev.github.io/jeanblog/zh/alg/leetcode/70-climbing-stairs/</link><pubDate>Sun, 03 May 2026 14:33:39 +0800</pubDate><guid>https://shio-chan-dev.github.io/jeanblog/zh/alg/leetcode/70-climbing-stairs/</guid><description>&lt;h2 id="题目要求"&gt;题目要求&lt;/h2&gt;
&lt;h3 id="输入输出"&gt;输入输出&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;输入：整数 &lt;code&gt;n&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;含义：爬到第 &lt;code&gt;n&lt;/code&gt; 阶楼顶&lt;/li&gt;
&lt;li&gt;每次可以爬 &lt;code&gt;1&lt;/code&gt; 或 &lt;code&gt;2&lt;/code&gt; 阶&lt;/li&gt;
&lt;li&gt;输出：返回到达楼顶的不同走法数量&lt;/li&gt;
&lt;li&gt;约束：&lt;code&gt;1 &amp;lt;= n &amp;lt;= 45&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="示例"&gt;示例&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输入：n = 2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输出：2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;解释：1+1，2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输入：n = 3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输出：3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;解释：1+1+1，1+2，2+1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这篇只用 Python，从 &lt;code&gt;dp[i]&lt;/code&gt; 的含义一步一步推出最终代码。&lt;/p&gt;
&lt;h2 id="从-n--3-的最后一步开始"&gt;从 &lt;code&gt;n = 3&lt;/code&gt; 的最后一步开始&lt;/h2&gt;
&lt;p&gt;先看最小能暴露转移的例子：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;n = 3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;到第 3 阶的最后一步只可能来自：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第 2 阶，再走 1 阶&lt;/li&gt;
&lt;li&gt;第 1 阶，再走 2 阶&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以“到第 3 阶的方法数”不是凭空算出来的，而是来自两个更小的位置。&lt;/p&gt;
&lt;h2 id="step-1先定义更小的问题"&gt;Step 1：先定义更小的问题&lt;/h2&gt;
&lt;p&gt;直接问“到第 &lt;code&gt;n&lt;/code&gt; 阶有几种走法”太大。先定义：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dp[i] = 到达第 i 阶的方法数
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意这里的 &lt;code&gt;i&lt;/code&gt; 是楼梯位置，不是数组下标含义上的第几个元素。&lt;/p&gt;</description></item><item><title>LeetCode 746：使用最小花费爬楼梯，从 top 位置推出 dp</title><link>https://shio-chan-dev.github.io/jeanblog/zh/alg/leetcode/746-min-cost-climbing-stairs/</link><pubDate>Sun, 03 May 2026 14:33:39 +0800</pubDate><guid>https://shio-chan-dev.github.io/jeanblog/zh/alg/leetcode/746-min-cost-climbing-stairs/</guid><description>&lt;h2 id="题目要求"&gt;题目要求&lt;/h2&gt;
&lt;h3 id="输入输出"&gt;输入输出&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;输入：整数数组 &lt;code&gt;cost&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cost[i]&lt;/code&gt; 表示踩到第 &lt;code&gt;i&lt;/code&gt; 阶的代价&lt;/li&gt;
&lt;li&gt;每次可以爬 &lt;code&gt;1&lt;/code&gt; 或 &lt;code&gt;2&lt;/code&gt; 阶&lt;/li&gt;
&lt;li&gt;可以从下标 &lt;code&gt;0&lt;/code&gt; 或下标 &lt;code&gt;1&lt;/code&gt; 开始&lt;/li&gt;
&lt;li&gt;输出：返回到达楼顶的最小花费&lt;/li&gt;
&lt;li&gt;约束：&lt;code&gt;2 &amp;lt;= cost.length &amp;lt;= 1000&lt;/code&gt;，&lt;code&gt;0 &amp;lt;= cost[i] &amp;lt;= 999&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="示例"&gt;示例&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输入：cost = [10,15,20]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输出：15
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;解释：从下标 1 开始，付 15 后直接到达 top
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输入：cost = [1,100,1,1,1,100,1,1,100,1]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输出：6
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="从-101520-的-top-位置开始"&gt;从 &lt;code&gt;[10,15,20]&lt;/code&gt; 的 top 位置开始&lt;/h2&gt;
&lt;p&gt;先看最小例子：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cost = [10,15,20]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;楼顶不是下标 &lt;code&gt;2&lt;/code&gt;，而是在最后一阶之后的位置，可以记为位置 &lt;code&gt;3&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;到达 top 位置 &lt;code&gt;3&lt;/code&gt; 的最后一步只可能来自：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;位置 &lt;code&gt;2&lt;/code&gt;，付 &lt;code&gt;cost[2]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;位置 &lt;code&gt;1&lt;/code&gt;，付 &lt;code&gt;cost[1]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这题最容易错的地方就在这里：我们要求的是“到达 top 的花费”，不是“到达最后一个下标的花费”。&lt;/p&gt;</description></item></channel></rss>