博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[剑指offer] 变态跳台阶
阅读量:6843 次
发布时间:2019-06-26

本文共 975 字,大约阅读时间需要 3 分钟。

本文首发于我的个人博客:

题目描述

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

解题思路

f(1) = 1f(2) = f(2-1) + f(2-2)        f(3) = f(3-1) + f(3-2) + f(3-3) ...f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n)

因为青蛙可以跳上任意级的台阶,所以以青蛙跳上一个 4 级的台阶为例进行分析,它可以在开始直接跳 4 级到 4 级台阶,也可以从 1 级台阶上往上跳 3 个台阶到 4 级,也可以从 2 级台阶往上跳 2 个台阶到 4 级,还可以从 3 级台阶上跳 3 级到 4 级。所以f(4) = f(4-1) + f(4-2) + f(4-3) + f(4-4)

可以得出以下的公式:

f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) => f(0) + f(1) + f(2) + f(3) + ... + f(n-1)又因为:f(n-1) = f(0) + f(1)+f(2)+f(3) + ... + f((n-1)-1)        = f(0) + f(1) + f(2) + f(3) + ... + f(n-2)f(n) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2) + f(n-1) = f(n-1) + f(n-1)     = 2 * f(n-1)

最后可以得到

f(n) = 1, (n=0)
f(n) = 1, (n=1)
f(n) = 2*f(n-1),(n>=2)

参考代码

public class Solution {    public int JumpFloorII(int target) {        if(target<=0)            return 0;        if(target == 1||target ==2)            return target;        else            return 2*JumpFloorII(target-1);    }}

转载地址:http://xedul.baihongyu.com/

你可能感兴趣的文章
PyDev for Eclipse 简介
查看>>
九九乘法表
查看>>
统一沟通-技巧-9-Lync 2010-Outlook 2010-自动配置-2-普通人员
查看>>
js/nodejs检测时间有效性
查看>>
IOS UITableView详解二性能优化 & LOL游戏人物展示
查看>>
nexus 7 恢复出厂设置后一系列问题
查看>>
关于jFinal Db.query与Db.find 的理解
查看>>
源码解读Saltstack运行机制之Job Runtime
查看>>
2012-01-07 21:58
查看>>
Hyper-V: Making Template Virtual Machines
查看>>
如何避免忙成狗
查看>>
JavaWeb学习之Servlet(四)----ServletConfig获取配置信息、Servle
查看>>
使用Redisson实现分布式锁
查看>>
LVS DR模式详细搭建过程
查看>>
致敬 54岁的刘德华
查看>>
使用pushd和popd进行快速定位
查看>>
Vmware Workstation 10.0.1 build-1379776 patch for Linux kernel 3.13
查看>>
error while loading shared libraries: libiconv.so.2
查看>>
shell自动分区
查看>>
记录几个重要词汇的解析。
查看>>