面试题 08.01. 三步问题

面试题 08.01. 三步问题

三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。

示例1:

输入:n = 3
输出:4
说明: 有四种走法
示例2:

输入:n = 5
输出:13
提示:

n范围在[1, 1000000]之间

 为什么可以在过程中取模而不影响最终结果

状态转移方程不用说了:S(n) = S(n-1)+S(n-2)+S(n-3)
因为要对结果S(n)取模,用S(n)‘代S(n)取模的结果,即 if S(n) > 1000000007: S(n)‘= S(n) - n*1000000007
于是如果对S(n+1)取模有:S(n+1) = S(n) + S(n-1) + S(n-2) = S(n)‘ + n*1000000007 + S(n-1) + S(n-2)
 那么S(n+1) % 1000000007 =( S(n)‘ + n*1000000007 + S(n-1) + S(n-2))%1000000007=   ( S(n)‘ + S(n-1) + S(n-2) ) % 1000000007,同理 S(n-1),S(n-2), 等于他们的取模和。
即:S(n+1) % 1000000007 =  ( S(n)‘ + S(n-1) ‘ + S(n-2) ‘ ) % 1000000007
 1  class Solution {
 2 public:
 3     int waysToStep(int n) {
 4         vector<long long> dp(n,0);
 5         if(n==0) return 0;
 6         else if(n==1) return 1;
 7         else if(n==2) return 2;
 8         else if(n==3) return 4;
 9         dp[0]=1;
10         dp[1]=2;
11         dp[2]=4;//1(到达一级楼梯的方法+一下两步到达三阶)+2(到达2阶楼梯的方法+一步到达三阶)+1(一下三步)
12         for(int i=3;i<n;i++){
13             dp[i]=(dp[i-1]+dp[i-2]+dp[i-3])%1000000007;//中途可能数字越界
14         }
15         return dp[n-1];//dp[n-1]%1000000007;
16     }
17 };

原文地址:https://www.cnblogs.com/NirobertEinteson/p/12694378.html

时间: 2024-08-02 23:10:09

面试题 08.01. 三步问题的相关文章

linux系统运维企业常见面试题集合(三)

linux系统运维企业常见面试题集合(三) 01  写一个sed命令,修改/tmp/input.txt文件的内容,要求:(1) 删除所有空行:(2) 一行中,如果包含"11111",则在"11111"前面插入"AAA",在"11111"后面插入"BBB",比如:将内容为0000111112222的一行改为:0000AAA11111BBB2222 [[email protected]~]# cat -n /t

字符串左旋右旋——三步旋转法和移相法

题目:实现一个函数,可以左旋字符串中的k个字符. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 方法一:三步旋转法 左旋程序思路:首先根据画图得知左旋后的结果,然后在分析实现的简约步骤: 第一步:字符串全逆序: 第二步:左边的字符串逆序: 第三步:右边的字符串逆序: 举例:左旋K=1个字符: 首先是头文件和主函数部分: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<windows.h

Spring Boot 集成 Ehcache 缓存,三步搞定!

本次内容主要介绍基于Ehcache 3.0来快速实现Spring Boot应用程序的数据缓存功能.在Spring Boot应用程序中,我们可以通过Spring Caching来快速搞定数据缓存. 接下来我们将介绍如何在三步之内搞定 Spring Boot 缓存. 1. 创建一个Spring Boot工程 你所创建的Spring Boot应用程序的maven依赖文件至少应该是下面的样子: <?xml version="1.0" encoding="UTF-8"?

vmware8~12最新版本 克隆Centos6.X 系列虚拟机网卡无法启动问题 (三步即可)

1.因工作或者学习需要,都需要在VM上克隆一台服务器,此时无论是快捷克隆(相当于快照的机体)或者完整克隆,都会碰到IP问题. 如:创建后症状:启动之后使用ifconfig,发现无ip地址,只有回环地址为127.0.0.1, MAC地址以及主机名都和源主机相同(源主机采用手动方式配置的IP). 原因:VM克隆为了保护源机器和克隆机器启动网路配置地址冲突而做的保护策略. 2.解决方法如下: 2.1 编辑eth0的配置文件:vi /etc/sysconfig/network-scripts/ifcfg

OpenCV-2.4.2 安装三步曲

注意:本人未使用  ffmpeg 的全部依赖库,比如AAC 音频编码库(libfaac-dev),MP3 编码库(ibmp3lame-dev),具体的配置为: ./configure --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-x11grab --enable-libx264 --enable-libxvid ===========================================

三步实现 远程连接 阿里云SqlServer 2012 数据库服务器

前言:在使用 阿里云 上的一些产品时,遇到不少坑. 安装IIS 时,遇到 因买的配置过低,虚拟内存不足,而导致 IIS 总是安装失败: 现在 在上面安装了个 Sql Sever 2012,远程老是 不能连接,百度找半天,终于能够连接上了. 实现步骤如下: 1. 找到 安全组配置,打开 安全组配置,点击配置规则,增加 地址段访问的 授权规则,Sql Server的默认端口时 1433 . 2. 服务器上 win + R  键入  compmgmt.msc ,打开 计算机管理,按照如图所示 设置.注

redha7.2配置静态网卡(三步搞定)

三步搞定: 编辑网卡配置文件:vi /etc/sysconfig/network-scripts/ifcfg-eno16777736(也可能是eth0或eth1或者eth+任何数字) 当前是DHCP,如果要使用静态IP修改: BOOTPROTO=static                #声明IP地址获得的途径 ONBOOT=yes                          #开启自动启用网络连接 增加: IPADDR=192.168.1.1              #设置IP地址(

三步将Node应用部署到Heroku上 --转载

Heroku是一个提供快速部署服务的云平台.支持Node,Ruby,Java,PHP,Python,Go多种语言,今天体验了下,简直不要太爽.下面简单的介绍一下. 首先还是要注册一个账号:https://signup.heroku.com/login 不知道为什么,这里163邮箱不能通过,qq可以.然后选择语言Node.js. 注册成功后,激活邮箱,填写密码. 1.创建一个app 登录成功后进入面板,创建一个应用 名称是可选的 2.连接github 创建成功后,进入app的部署页面. 提供三种部

三步升级已安装的 Android SDK 和 ADT 插件(转载)

转载:http://www.tfan.org/update-adt-and-android-sdk-in-five-minutes/ 如何快速地把已安装的 Android SDK 及 Eclipse 的 ADT 插件升级到最新版本?同时又能保证之前下载的 Android API 和扩展可用.下面我们使用三步来完成更新操作. 第一步,升级 Android SDK 首先到 Google Android SDK 的下载页面下载最新的 SDK,注意是 “SDK tools only”,不要下载 ADT