70. Climbing Stairs

来源:互联网 发布:中国依赖进口数据 编辑:程序博客网 时间:2024/05/17 10:08

题目:Climbing Stairs

原题链接:https://leetcode.com/problems/climbing-stairs/
You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

假设你正在上台阶,一共有 n 阶。每一次你可以选择迈 1 级台阶或者 2 级台阶,一共有多少中不同的登法?

又是一条经典的动态规划题。
设一个数组dp[ n + 1 ],dp[ i ]表示登上第 i 级台阶的方法数。
很明显dp[ 0 ] = dp[ 1 ] = 1, dp[ 2 ] = 2;
对于任意的第 i 级台阶,它可以从第 i - 1 级台阶迈一级台阶跨上,也可以从第 i - 2 级台阶迈两级台阶跨上。
即 dp[ i ] = dp[ i - 1 ] + dp[ i - 2 ]。
一直循环置i == n,就是结果。

代码如下:

class Solution {public:    int climbStairs(int n) {        if(n == 1 || n == 0) return 1;        else if(n == 2) return 2;        int dp[n + 1];        dp[1] = 1, dp[2] = 2;        for(int i = 3; i <= n; ++i) dp[i] = dp[i - 1] + dp[i - 2];        return dp[n];    }};
0 0
原创粉丝点击