微软算法100题27 跳台阶问题

本文探讨了一个经典的跳台阶问题,通过数学归纳法解析了问题的解决思路,得出了解决方案与斐波那契数列的关系。文章还提供了一段Java实现代码,用于计算给定台阶总数时的所有可能跳法。

27.跳台阶问题
题目:一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级。
求总共有多少总跳法,并分析算法的时间复杂度

思路:通过数学归纳法 

n=1 1

n=2 2

n=3 3

n=4 5

n=5 8

可知n>=3时 f(n)=f(n-1)+f(n-2) 是一个斐波那契数列, 该问题的时间复杂度也就是求斐波那契数列第N项的时间复杂度

n=3时需要计算2次, n=4时需要计算3次,n=5时需要计算5次,求斐波那契第N项的时间复杂度也是一个斐波那契数列,即O(n)=O(fib(n))

 

 1 package com.rui.microsoft;
 2 
 3 public class Test27_JumpStairs {
 4 
 5     public static void main(String[] args) {
 6         int total = jump(6);
 7         System.out.println(total);
 8     }
 9     
10     public static int jump(int n){
11         if(n <= 0) return 0;
12         else if (n == 1) return 1;
13         else if (n == 2) return 2;
14         else{
15             return jump(n-1) + jump(n-2);
16         }
17     }
18 }

 

转载于:https://www.cnblogs.com/aalex/p/4911254.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值