《剑指offer》面试题10- II. 青蛙跳台阶问题
问题描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2
输出:2
示例 2:
输入:n = 7
输出:21
提示:
0 <= n <= 100
代码1
class Solution {
public:
int numWays(int n) {
if(n < 2)return 1;
if(n < 3)return 2;
return (numWays(n-2)+numWays(n-1))%1000000007;
}
};
结果超出时间限制。
代码2
class Solution {
public:
int numWays(int n) {
if(n < 2)return 1;
if(n < 3)return 2;
vector<int> num(n+1,-1);
num[2] = 2;num[1]=1;num[0]=1;
return comp(n,num);
}
int comp(int i,vector<int> &num)
{
if(num[i] == -1)
{
num[i] = (comp(i-1,num)+comp(i-2,num))%1000000007;
}
return num[i];
}
};
结果:
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗 :6.4 MB, 在所有 C++ 提交中击败了100.00%的用户
代码3(动态规划)
class Solution {
public:
int numWays(int n) {
if(n < 2)return 1;
if(n < 3)return 2;
vector<int> num(n+1,-1);
num[2] = 2;num[1]=1;num[0]=1;
for(int i = 3; i <= n; ++i)
{
num[i] = (num[i-1]+num[i-2])%1000000007;
}
return num[n];
}
};
结果:
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗 :6.3 MB, 在所有 C++ 提交中击败了100.00%的用户
代码4(改进动态规划)
class Solution {
public:
int numWays(int n) {
if(n < 2)return 1;
if(n < 3)return 2;
int n1 = 1,n2 = 2,ans;
for(int i = 3; i <= n; ++i)
{
ans = (n1+n2)%1000000007;
n1 = n2;
n2 = ans;
}
return ans;
}
};
结果:
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗 :5.9 MB, 在所有 C++ 提交中击败了100.00%的用户
《剑指offer》面试题10- II. 青蛙跳台阶问题的更多相关文章
- 【校招面试 之 剑指offer】第10-2题 青蛙跳台阶问题
题目1:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个n级台阶共有多少种跳法? 题目2:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶...也可以一次跳n级台阶.求该青蛙跳上一个 ...
- 剑指offer 面试题10.2:青蛙变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 编程思想 因为n级台阶,第一步有n种跳法:跳1级.跳2级.到跳n级跳1级,剩下 ...
- 剑指offer 面试题10.1:青蛙跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 编程思想 对于本题,前提只有 一次 1阶或者2阶的跳法.a.如果两种跳 ...
- 剑指offer——面试题10:斐波那契数列
个人答案: #include"iostream" #include"stdio.h" #include"string.h" using na ...
- 剑指offer 9.递归和循环 变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 这道题还是编程题? 数学渣渣看到心拔凉拔凉的, 要用到数学归纳法来 ...
- [剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖
跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution { public: int jumpFloor(int number) ...
- 《剑指offer》— JavaScript(8)跳台阶
跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 实现代码 function jumpFloor(number) { if (number& ...
- 剑指Offer面试题10(Java版):二进制中的1的个数
题目:请实现一个函数,输入一个整数.输出该数二进制表示中1的个数. 比如把9表示成二进制是1001,有2位是1.因此假设输入9.该函数输出2. 1.可能引起死循环的解法 这是一道非常主要的考察二进制和 ...
- 剑指offer 面试题10:斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 编程思想 知道斐波拉契数列的规律即可. 编程实现 class Solu ...
- C#版 - 剑指offer 面试题9:斐波那契数列及其变形(跳台阶、矩形覆盖) 题解
面试题9:斐波那契数列及其变形(跳台阶.矩形覆盖) 提交网址: http://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tp ...
随机推荐
- SpringSecurity自定义注解和处理器
登录功能 添加一个配置类 @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Reso ...
- CF135A Replacement 题解
Content 有 \(n\) 个数 \(a_1,a_2,a_3,...,a_n\),试用 \(1\) ~ \(10^9\) 之间的数(除了本身)代替其中的一个数,使得这 \(n\) 个数的总和最小, ...
- dump Java 程序和服务器相关信息
#!/bin/bash jps -lm read -p "enter java pid: " pid port=$(netstat -ntlp | grep $pid | awk ...
- 使用docker自定义oraclejdk启动jar包
Dockerfile文件 FROM centos:7 #把java与tomcat添加到容器中 ADD jdk-8u161-linux-x64.tar.gz /usr/local/ #安装 vim编辑器 ...
- IDEA快速创建一个简单的SpringBoot项目(需要联网)
一.点击File-New-Project,选择Spring initializr ,选择jdk1.8及以上 二.填写相关信息,点击Next 3.选择Web -Spring Web,点击Next 4.输 ...
- Java不可变类与final类
概念 Java的不可变类是指八个基础类型的包装类和String,他们的数据成员是不可变的.使用加法等操作时,其实是创建了一个新的对象. Java的final类是对类用关键字final进行修饰,说明该类 ...
- Mysterious For(hdu4373)
Mysterious For Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- hdu-1237简单计算器(栈的运用)
http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单的栈的运用. 首先将数字和运算符分离,分别保存在两个数组中,然后按原来的式子的顺序,首先将第一个数和第 ...
- mac学习Python第二天:开发工具安装、编程方式、中文编码、syntaxError语法错误、注释、语法格式
一.python集成开发工具Visual Studio Code安装配置 1.官网下载安装VSCode 官网地址 https://code.visualstudio.com/下载软件包 VSCode ...
- matplotlib 进阶之Legend guide
目录 matplotlib.pyplot.legend 方法1自动检测 方法2为现有的Artist添加 方3显示添加图例 控制图例的输入 为一类Artist设置图例 Legend 的位置 loc, b ...