挑战数据结构和算法——跳台阶问题

题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。

这里写图片描述

问题分析:假设 f(n) f ( n ) 为跳台阶的总跳法,当 n=1 n = 1 时, f(n)=1 f ( n ) = 1 ;当 n=2 n = 2 时, f(n)=2 f ( n ) = 2 ;当 n=3 n = 3 时,如果先跳1级台阶,有 f(n1)=f(2) f ( n − 1 ) = f ( 2 ) 种方法,如果先跳2级台阶,有 f(n2)=f(1) f ( n − 2 ) = f ( 1 ) 种方法,依次类推,可以得到下面的递推公式:

f(n)=12f(n1)+f(n2) if n=1 if n=2 if n>2 f ( n ) = { 1  if  n = 1 2  if  n = 2 f ( n − 1 ) + f ( n − 2 )  if  n > 2

方法:

int get_kind(int n){
    if (n <= 0) return 0;

    int result;
    int *cal = (int *)malloc(sizeof(int) * n);
    for (int i = 0; i < n; i++){
        if ((i + 1) == 1) cal[i] = 1;
        else if ((i + 1) == 2) cal[i] = 2;
        else {
            cal[i] = cal[i-1] + cal[i-2];
        }
    }
    result = cal[n-1];
    free(cal);
    return result;
}

时间复杂度为O(n)。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页