剑指offer | 变态跳台阶(一行代码 C++)

题目描述

原题链接

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法

算法1

(数学方法) O ( 1 ) O(1)

  • 由题意知, [ 1 , . . . , n 1 ] [1,...,n-1] 级台阶中的每一级跳或不跳都没有关系,只要跳了最后一级( 第 n n 级 )台阶 该青蛙都能跳到第n级台阶
  • 所以总共有 2 n 1 2^{n - 1} 种跳法

时间复杂度是 O ( 1 ) O(1) ,空间复杂度是 O ( 1 ) O(1)

C++代码

class Solution {
public:
    int jumpFloorII(int number) {
        return 1 << (number - 1);
    }
};

算法2

(暴力) O ( n 2 ) O(n^2)

  • 暴力计算,每次累计下 [ 1 , . . . , i 1 ] [1,...,i-1] 的值

时间复杂度是 O ( n 2 ) O(n^2) ,空间复杂度是 O ( n ) O(n)

C++代码

class Solution {
public:
    int jumpFloorII(int number) {
        int *f = new int[number + 1];
        f[0] = 1;
        for (int i = 1; i <= number; i ++) {
            int sum = 0;
            for (int t = 0; t < i ; t ++) {
                sum += f[t];
            }
            f[i] = sum;
        }
        
        int res = f[number];
        delete[] f;
        return res;
    }
};

写在最后:我的博客主要是对计算机领域所学知识的总结、回顾和思考,把每篇博客写得通俗易懂是我的目标,分享技术和知识是一种快乐 ,非常欢迎大家和我一起交流学习,有任何问题都可以在评论区留言,也期待与您的深入交流(^∀^●)

发布了270 篇原创文章 · 获赞 111 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_43827595/article/details/104417662