上楼梯(动态规划)
2017-04-30 20:31
141 查看
—————–>>>>>> 题目来源<<<<<<———————
题目描述
有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为了防止溢出,请将结果Mod 1000000007
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。
测试样例:
1
返回:1
解题思路:这题用的是动态规划的解法。由题可知,到目标阶梯的方法共有三种:
1.由n-1到达,走了一步。
2.由n-2到达,走了两步。
3.由n-3到达,走了三步。
那么,很明显,这三种到达目标阶梯的总和就是到达目标阶梯的所有可能性。
直接贴代码。
题目描述
有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为了防止溢出,请将结果Mod 1000000007
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。
测试样例:
1
返回:1
解题思路:这题用的是动态规划的解法。由题可知,到目标阶梯的方法共有三种:
1.由n-1到达,走了一步。
2.由n-2到达,走了两步。
3.由n-3到达,走了三步。
那么,很明显,这三种到达目标阶梯的总和就是到达目标阶梯的所有可能性。
直接贴代码。
public static int countWays(int n) { int a[] = { 1, 1, 2 };//代表 0 1 2 个阶梯的可能性 if (n < 3) { return a ; } int i = 3; for (; i <= n ; i++) { int x = 0; for (int j = 0; j < 3; j++) { x += a[(i + j) % 3]; x %= 1000000007; } a[i % 3] = x; } return a[(i - 1) % 3]; } public static void main(String[] args){ Scanner input=new Scanner(System.in); int n=input.nextInt(); System.out.println(countWays(n)); }
相关文章推荐
- 上楼梯(动态规划)
- HDU 2014:超级楼梯(动态规划)
- DP 动态规划 Problem J 1010 上楼梯问题
- 9.9递归和动态规划(一)——小孩上楼梯的方式的种类
- 【动态规划】上楼梯
- 九度OJ 1205 N阶楼梯上楼问题 -- 动态规划(递推求解)
- 20170801_动态规划之爬楼梯有多少不同的方法
- 九度OJ 1205 N阶楼梯上楼问题 -- 动态规划(递推求解)
- 爬楼梯问题(动态规划)
- Leetcode#746. Min Cost Climbing Stairs(最低花费登楼梯--动态规划)
- 动态规划走楼梯
- 【动态规划】牛顿爬楼梯问题
- hdu 2041 超级楼梯 动态规划 简单
- 上楼梯(动态规划)
- 上楼梯---动态规划问题
- 动态规划:从新手到专家
- hdu 诡异的楼梯(BFS)
- 动态规划之背包问题
- hdu 1180 诡异的楼梯(优先队列)
- 超级楼梯 递推动规