上楼梯---动态规划问题
来源:互联网 发布:什么源码值得读知乎 编辑:程序博客网 时间:2024/05/16 06:41
题目描述:
有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为了防止溢出,请将结果Mod 1000000007
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。
测试样例:
1
返回:1
解题思路:
到达最后一节台阶,则有可能从第n-1阶也有可能从n-2阶也有可能从n-3阶,所以第n阶台阶的上法就是 n-1阶台阶的上法+n-2的上法+n-3的上法
注意:
为了防止最后结果溢出则取模的话:
取模运算有这样一个性质:(a+b)%c = ((a%c)+(b%c))%c
所以(a[i-1]+a[i-2])%1000000007就相当于(a[i-1]%X+a[i-2]%X)%X 用X代替1000000007
这样就使得a[i-1]、a[i-2]、a[i-1]+a[i-2]都没有溢出,之后再与a[i-3]相加之后取模,使得全部结果没有溢出。
public static int countWays(int n) { /** * 解题思想是利用动态规划和递归。 * 最后一步可能是从第n-1阶,也有可能是从n-2阶,或者n-3 * 那么A[N] = A[N-1]+A[N-2]+A[N-3] */ int[] pre = {1,2,4}; if (n <4) { return pre[n-1]; } for (int i = 4; i <= n; i++) { int temp = ((pre[0]+pre[1])%1000000007 + pre[2])%1000000007; pre[0] = pre[1]; pre[1] = pre[2]; pre[2] = temp; } int res = pre[2]; return res; }
0 0
- 上楼梯---动态规划问题
- 【动态规划】上楼梯
- 上楼梯(动态规划)
- 上楼梯(动态规划)
- 上楼梯(动态规划)
- DP 动态规划 Problem J 1010 上楼梯问题
- 动态规划: 爬楼梯问题
- 爬楼梯问题(动态规划)
- 【动态规划】爬楼梯问题
- 动态规划------走楼梯问题
- 动态规划(爬楼梯问题)
- 爬楼梯问题(递归+动态规划)
- 动态规划走楼梯
- 动态规划-走楼梯
- lintcode111爬楼梯问题(动态规划easy)
- 走楼梯 递归 动态规划
- 走楼梯 递归 动态规划
- 蒜头爬楼梯-动态规划
- Spring(一)——总体介绍
- Recyclerview style
- (0010) iOS 开发之UI布局兼容 4s/5/6/7 屏幕解决方案
- leetcode 404 Sum of Left Leaves
- 修改linux的文件权限命令 chmod
- 上楼梯---动态规划问题
- 第十二周项目5--迷宫问题之图深度优先遍历解法
- Spring集成HttpClient实现跨域请求
- spring框架,可以没有spring.xml(即配置<beans>的文件吗?即不使用xml方式配置,而是只使用注解的方式配置
- session 过期设置
- AHUOJ级语言程序设计实验(六)求面积
- 从代理设计模式到Spring AOP
- IP分片与重组
- 我的第一份工作,久远银海