剑指offer例题——跳台阶、变态跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路:
n<=0时,有0种跳法
n=1时,只有一种跳法
n=2时,有两种跳法
已知当n>2时,当最后一次跳1级台阶,则之前有f(n-1)种跳法,当最后一次跳2级台阶时,之前有f(n-2)种跳法,即f(n)=f(n-1)+f(n-2);
故此处采用递归的方法
递归(英语:recursion)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。
public class Solution {
public int JumpFloor(int target) {
if (target <= 0)
return 0;
if (target == 1)
return 1;
if (target == 2)
return 2;
return JumpFloor(target-1)+JumpFloor(target-2);
}
}
上述代码中,若去掉if语句的括号,则会产生缺失的错误
./Solution.java:3: error: '(' expected
if target == 0
^
./Solution.java:3: error: ')' expected
if target == 0
^
2 errors
待加入变态跳台阶,今天累了~
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
已知当青蛙第一次跳一级台阶,则之后有f(n-1)种跳法;
第一次跳两级台阶,则之后有f(n-2)种跳法;
第一次跳三级台阶,则之后有f(n-3)种跳法……第一次跳n级台阶,则有f(n-n)种跳法,故f(n)=f(n-1)+f(n-2)+……+f(n-n),
同理f(n-1)=f(n-2)+……+f(n-n)。将上述两式相减,则f(n)-f(n-1)=f(n-1),即f(n)=2*f(n-1);
故上述编程为:
public class Solution {
public int JumpFloorII(int target) {
if (target<=0)
return 0;
if (target==1)
return 1;
return 2*JumpFloorII(target-1);
}
}
完美,最后结果为
运行时间:12ms;占用内存:9028k。
总结:递归是个好东西!
剑指offer例题——跳台阶、变态跳台阶的更多相关文章
- 剑指Offer - 九度1389 - 变态跳台阶
剑指Offer - 九度1389 - 变态跳台阶2013-11-24 04:20 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳 ...
- 剑指offer(9)变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 题目分析 根据上一个题目可以知道,青蛙只跳1或2可以得出是一个斐波那契问题,即 ...
- 【剑指Offer】9、变态跳台阶
题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路: 当只有一级台阶时,f(1)=1:当有两级台阶时, ...
- 剑指offer【10】- 变态跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 关于本题,前提是n个台阶会有一次n阶的跳法.分析如下: f(1) = 1 f(2) ...
- 【剑指offer】9:变态跳台阶
题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路: 先考虑最简单情况就是只有一级台阶,仅有一种跳法.两级台阶,有两种 ...
- 剑指offer 8.递归和循环 跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 解题思路一: a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是 ...
- 剑指offer例题分享--6
前言:继续整理例题,快速做完这部分,然后继续用C++去刷数据结构和算法的题. 面试题28: 代码如下: #include<iostream> #include<stdio.h> ...
- 剑指offer 例题
题目: 实现一个排序算法,排序对象是本公司员工的年龄.要求时间复杂度O(n),空间复杂度不能超过O(n). #include<iostream> using namespace std; ...
- 剑指offer例题分享--8
前言:继续分享,加油! 面试题44: 代码如下: #include<iostream> #include<stdlib.h> using namespace std; int ...
随机推荐
- [UE4]在AI Character中要获得AI的controller,需要使用Get AIController
- Css学习(三)
1 行高 ◆浏览器默认文字大小 浏览器默认文字大小:16px 行高:是基线与基线之间的距离 行高=文字高度+上下边距 一行文字行高和父元素高度一致的时候,垂直居中显示. 行高的单位 总结:单位除了像素 ...
- Junit4简单使用
一.Junit4是JAVA语言的单元测试框架,用于编写和运行可重复的测试,可以大大提高效率 1.使用Junit4必须在项目中导入Junit4.har文件 2.新建Junit Test case 勾选s ...
- Install Greenplum OSS on Ubuntu
About Greenplum Database Greenplum Database is an MPP SQL Database based on PostgreSQL. Its used in ...
- Docker 系列01: Centos7.3 上安装docker
Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施.容器 ...
- JavaBean转xml
JavaBean转xml的工具就是:XStream XStream的作用: XStream可以把JavaBean对象转换成XML!通常服务器向客户端响应的数据都是来自数据库的一组对象,当我们不能直接把 ...
- linux安装chrome浏览器
按照下面的方式安装 wget -P /home/linfu/桌面 https://dl.google.com/linux/direct/google-chrome-stable_current_amd ...
- @Autowired与@Resource 详细诠释和区别(附带例子)
@Autowired 与@Resource:1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2.@Autowired默认按类型装配( ...
- Java中对List集合的常用操作(转)
list中添加,获取,删除元素: list中是否包含某个元素: list中根据索引将元素数值改变(替换): list中查看(判断)元素的索引: 根据元素索引位置进行的判断: 利用list中索引位置重新 ...
- python中列表删除和多重循环退出
在学习python的时候,会有一些梗非常不适应,在此列举列表删除和多重循环退出的例子: 列表删除里面的坑 比如我们有一个列表里面有很多相同的值,假如:nums=[1,6,6,3,6,2,10,2,10 ...