美文网首页
70.爬楼梯

70.爬楼梯

作者: 王侦 | 来源:发表于2022-09-25 08:50 被阅读0次

    题目地址(70. 爬楼梯)

    https://leetcode.cn/problems/climbing-stairs/

    题目描述

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
    
    

    前置知识

    • 递归和动态规划

    公司

    • 暂无

    思路

    • 动态规则就是要找出状态转移方程

    关键点

    • f(n) = f(n-1) + f(n-2),n = 1,f(n)=1;n=2时,f(n)=2

    代码

    • 语言支持:Java

    Java Code:

    
    class Solution {
        public int climbStairs(int n) {
            if (n == 1) {
                return 1;
            }
            if (n == 2) {
                return 2;
            }
            int a = 1;
            int b = 2;
            for (int i = 3; i <= n; ++i) {
                int tmp = a;
                a = b;
                b = tmp + b;
            }
            return b;
        }
    }
    
    

    另一种常见写法

        public int climbStairs(int n) {
            if (n == 1) {
                return 1;
            }
            if (n == 2) {
                return 2;
            }
            int current = 0;
            int a = 1;
            int b = 2;
            for (int i = 3; i <= n; ++i) {
                current = a + b;
                a = b;
                b = current;
            }
            return current;
        }
    

    Go Code:

    func climbStairs(n int) int {
        if n == 1 {
            return 1
        }
        if n == 2 {
            return 2
        }
    
        a, b, current := 1, 2, 0
        // go没有前置的++i
        for i := 3; i <= n; i++ {
            current = a + b
            a = b
            b = current
        }
        return current
    }
    

    复杂度分析

    令 n 为数组长度。

    • 时间复杂度:O(n)
    • 空间复杂度:O(1)

    相关文章

      网友评论

          本文标题:70.爬楼梯

          本文链接:https://www.haomeiwen.com/subject/xgxzortx.html