leetcode 70 爬楼梯(动态规划)
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1、 1 阶 + 1 阶 2、2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1、1 阶 + 1 阶 + 1 阶 2、1 阶 + 2 阶 3、2 阶 + 1 阶 暴力搜索,回溯法 //超时 class Solution { public : int climbStairs ( int n ) { if ( n == 1 || n == 2 ) { return n ; } return climbStairs ( n - 1 ) + climbStairs ( n - 2 ) ; } } ; 第i阶的爬法数量 = 第i-1阶的爬法数量 + 第i-2阶的爬法数量 算法思路: 1、设置递推数组dp[0……n],dp[i]代表到达第i阶,有多少种走法,初始化数组元素为0 2、设置到达第1阶台阶,有1种走法,到达第2阶台阶有2种走法 3、利用i循环递推从第3阶至第n阶结果 class Solution { public : int climbStairs ( int n ) { vector < int > dp ( n + 3 , 0 )