前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >挑战数据结构和算法——跳台阶问题

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

作者头像
felixzhao
发布2019-01-31 16:19:42
4780
发布2019-01-31 16:19:42
举报
文章被收录于专栏:null的专栏null的专栏

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

这里写图片描述
这里写图片描述

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

f(n)=⎧⎩⎨⎪⎪12f(n−1)+f(n−2) if n=1 if n=2 if n>2f(n)={1 if n=12 if n=2f(n−1)+f(n−2) if n>2

f\left ( n \right )=\begin{cases} 1 & \text{ if } n=1 \\ 2 & \text{ if } n=2 \\ f\left ( n-1 \right )+f\left ( n-2 \right ) & \text{ if } n>2 \end{cases}

方法:

代码语言:javascript
复制
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)。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档