码迷,mamicode.com
首页 > 其他好文 > 详细

爬楼梯

时间:2020-08-21 16:42:32      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:编辑   http   规划   解题思路   多少   示例   爬楼梯   nice   一个   

题目描述:

假设你正在爬楼梯。需要 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 阶

解题思路:

一、直接递归

//go
func climbStairs(n int) int {
    if n == 1 {
        return 1
    }
    if n == 2 {
        return 2
    }
    return climbStairs(n-2) + climbStairs(n-1)
}

二、直接动态规划

新建一个字典或者数组来存储以前的变量,空间复杂度O(n)

//go
func climbStairs(n int) int {

    if n == 1 {
        return 1
    }
    if n == 2 {
        return 2
    }
    dp := make([]int, n+1)
    dp[1], dp[2] = 1, 2
    for i := 3; i <= n; i++ {
        dp[i] = dp[i-2] + dp[i-1]
    }
    return dp[n]
}

三、状压动态规划

实际上当前的结果只需前两个元素决定,所以只存储前两个元素,减少了空间,空间复杂度O(1)

//go
func climbStairs(n int) int {
    if n == 1 {
        return 1
    }
    if n == 2 {
        return 2
    }
    first, second, cur := 1,2,0 
    for i := 3; i <= n; i++ {
        cur = first + second
        first = second
        second = cur
    }
    return cur
}

  地址:https://mp.weixin.qq.com/s/muHOruDwMyAwt6DJZU9Ofg

爬楼梯

标签:编辑   http   规划   解题思路   多少   示例   爬楼梯   nice   一个   

原文地址:https://www.cnblogs.com/smallleiit/p/13527306.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!