斐波那契问题——上台阶问题
题目:
给定整数N,代表台阶数,一次可以跨2个或者1个台阶,返回有多少种走法。
举例:
N=3,可以三次跨一个台阶,也可以先跨2再跨1,也可以先跨1再跨2,共三种走法。
思路:
如果台阶只有1级,方法只有一种,如果台阶有两级,方法有两种。如果台阶有N级,最后跳上第N级台阶时,要么从N-2级台阶直接跨2级,要么从N-1级跨1级上去。所以台阶有N阶的方法为跨到N-2级台阶的方法数加上跨到N-1级台阶的方法数。即S(N)=S(N-1)+S(N-2)
S(1)=1 S(2)=2 。
例如台阶为5阶:(共八种)
先跨3阶,1 1 1,1 2, 2 1,最后一步跨 2(共三种)
先跨4阶,1 1 1 1,1 1 2,1 2 1,2 1 1 ,2 2,最后一步跨1(共五种)
类似于斐波那契数列:
方法一: 暴力递归
public static int s1(int N) {if (N == 1) {return 1;}if (N == 2) {return 2;}return s1(N-1) + s1(N-2);}
方法二:O(N)
public static int s2(int N) {if (N < 1) {return 0;}if (N == 1 || N ==2) {return N;}int res = 2;int pre = 1;int tmp = 0;for (int i = 3; i <= N; i++) {tmp = res;res += pre;pre = tmp;}return res;}
方法三:(使用矩阵乘法)
S(N)=S(N-1)+S(N-2)是一个二阶递推数列,用上篇博客的矩阵乘法的方法,根据前四项
代码实现:
代码中的matrixPower方法在这篇博客介绍:斐波那契数列问题
public static int s3(int N) {if (N < 1) {return 0;}if (N == 1 || N ==2) {return N;}int[][] base = {{1,1},{1,0}};int[][] res = matrixPower(base, N-2);return 2*res[0][0] + res[1][0];}
斐波那契问题——上台阶问题相关推荐
- 小乐乐上台阶【斐波那契】
描述 小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法? 输入描述: 输入包含一个整数n (1 ≤ n ≤ 30) 输出描述: 输出一个整数,即小乐乐 ...
- 算法---斐波那契思想
1.主要框架:f(n)=f(n-1)+f(n-2) 用不同的方法求解斐波那契数列的时间效率大不相同.第一种基于递归的解法虽然直观但时间效率很低,在实际软件开发中不会用这种方法,也不可能得到面试官的青睐 ...
- java 斐波拉_Java实现斐波那契数列
斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&g ...
- java 二分搜索获得大于目标数的第一位_程序员常用查找算法(顺序、二分、插值、分块、斐波那契)...
顺序查找 基本思想 属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素. 这是最基本的查找方法,也是时间复杂度最高的查找算法. 在数据过多时,这种方法并不适用. 代码实现 ...
- 剑指offer:面试题10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 ...
- 斐波那契算法举例(iterative Fibonacci algorithm)
// count_change.cpp : Defines the entry point for the console application. // #include "stdafx. ...
- BZOJ2275[Coci2010]HRPA——斐波那契博弈
题目描述 N个石子,A和B轮流取,A先.每个人每次最少取一个,最多不超过上一个人的个数的2倍. 取到最后一个石子的人胜出,如果A要有必胜策略,第一次他至少要取多少个. 输入 第一行给出数字N,N< ...
- 用递归法计算斐波那契数列的第n项
斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1, ...
- 循环斐波那契数列_剑指offer #10 斐波那契数列
(递归和循环)#10 斐波那契数列 一.斐波那契数列 定义: n = 0 , f(n) = 0 n = 1 , f(n) = 1 n > 1 , f(n) = f(n-1) + f(n-2) 思 ...
最新文章
- 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.7.5 使用StAX写出XML文档
- 中秋节前,送一波福利
- 简单工厂模式(详细)(举例饮料)
- python分割文件目录/文件名和后缀
- 基于Mac自带nginx、php,配置php服务器
- 一、tars简单介绍 二、tars 安装部署资料准备
- Python MD5
- windows加域后的问题
- 蓝桥杯枚举+判断结果填空:猜年龄/奇妙数字
- VC6和VS2005(及2010)的一些区别总结
- DXperience 9.1.3
- 施工员简历英语计算机水平,土建施工员电子版英文简历模板
- 微信小程序 —— 成员管理及开发管理
- Java在手机平台上的Porting
- JavaScript基础知识总结 18:dom基本操作
- 表中数据的更改量保存视图
- Codeforces Round #807 (Div. 2)(A-D)
- 元数据是什么意思_中国股市:股票分红10转10股派5元,你看懂是什么意思了吗?...
- Linux中的括号用法
- C# 矩阵库 功能特别强大!!