leetcode经典动态规划解题报告
<h3 id="leetcode70-爬楼梯"><a href="#leetcode70-爬楼梯" class="headerlink" title="leetcode70 爬楼梯"></a>leetcode70 爬楼梯</h3><p>题目描述<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">假设你正在爬楼梯。需要 n 阶你才能到达楼顶。</span><br><span class="line"></span><br><span class="line">每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?</span><br></pre></td></tr></table></figure></p> <p>解答:<br>递推公式:</p> <p>设f(n)为n阶楼梯的爬法<br><code>f(n)=f(n-1)+f(n-2) n>2</code><br><code>f(n)=1 n=1</code><br><code>f(n)=2 n=2</code><br>到达第n阶楼梯,有两种方法,一种是从第n-1阶楼梯,走一步到;另一种是从n-2阶楼梯,走两步到。</p> <p>根据以上的递归公式,我们很容易写出下面的代码:<br><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">int</span> <span class="title">climbStairs</span><span class="params">(<span class="keyword">int</span> n)</span> </span>{</span><br><span class="line"> <span class="keyword">if</span> (n<<span class="number">3</span>){</span><br><span class="line"> <span class="keyword">return</span> n;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">int</span>[] dp=<span class="keyword">new</span> <span class="keyword">int</span>[n+<span class="number">1</span>];</span><br><span class="line"> dp[<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> dp[<span class="number">2</span>]=<span class="number">2</span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">3</span>;i<=n;i++){</span><br><span class="line"> dp[i]=dp[i-<span class="number">1</span>]+dp[i-<span class="number">2</span>];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> dp[n];</span><br><span class="line"> }</span><br></pre></td></tr></table></figure></p>