程序员面试金典:上楼梯、机器人走方格I
2017-07-22 14:59
127 查看
1.上楼梯
题目描述有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为了防止溢出,请将结果Mod 1000000007
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。
测试样例:
1
返回:1
类似这种上楼梯的题目都可以用动态规划或者递归来做,首先要用数学归纳法找出通项公式
方法1:不断往n迭代推进
import java.util.*; public class GoUpstairs { public int countWays(int n) { int dp1=1,dp2=2,dp3=4; if(n==1) return dp1; if(n==2) return dp2; if(n==3) return dp3; int result=0; int temp=0; for(int i=4;i<=n;i++){ temp=(dp1+dp2)%1000000007; //注意:此处原先没加取模运算,则报错 result=(temp+dp3)%1000000007; //不断向n推进 dp1=dp2; dp2=dp3; dp3=result; } return result; } }
方法2:利用数组下标(动态规划)
import java.util.*;public class GoUpstairs {
public int countWays(int n) {
int nums[]=new int
;
//角标变了最后元素在为nums[n-1]
nums[0]=1;
nums[1]=2;
nums[2]=4;
for(int i=3;i<n;i++){
nums[i]=((nums[i-3]+nums[i-2])%1000000007+nums[i-1])%1000000007;
}
return nums[n-1];
}
}
2.机器人走方格I
题目描述有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。
给定两个正整数int x,int y,请返回机器人的走法数目。保证x+y小于等于12。
测试样例:
2,2
返回:2
方法1:递归解法
思想: 机器人在X*Y的矩阵中走,每一步都有两种选择:要么向下、要么向右。如果向下走,问题就变成:求(X-1)*Y矩阵中机器人的走法;如果向右走,问题就变成:求X*(Y-1)矩阵中机器人的走法;到达最后一个格点回退。(最后一个点坐标(1,1),开始写(0,0)始终编译不过)
import java.util.*; public class Robot { public int countWays(int x, int y) { if(x==0||y==0) return 0; if(x==1||y==1) return 1; else return countWays(x-1,y)+countWays(x,y-1); } }
方法2:动态规划
大格子两条边的走法只有1条,每个小格子countWays(x, y)=countWays(x-1, y)+countWays(x, y-1)import java.util.*; public class Robot { public int countWays(int x, int y) { int dp[][]=new int[x][y]; for(int i=0;i<x;i++){ dp[i][0]=1; } for(int i=0;i<y;i++){ dp[0][i]=1; } for(int i=1;i<x;i++){ for(int j=1;j<y;j++){ dp[i][j]=dp[i][j-1]+dp[i-1][j]; } } return dp[x-1][y-1]; } }
相关文章推荐
- 程序员面试金典:第K个数、机器人走方格
- 程序员面试金典——机器人走方格2
- 程序员面试金典:机器人走方格II、魔术索引I
- 程序员面试金典——机器人走方格
- 程序员面试金典——机器人走方格1
- (动态规划问题)机器人走方格
- 51nod 1119 机器人走方格V2 lucas定理
- 51nod 1118 机器人走方格
- 51nod 1119 机器人走方格 V2
- 1119 机器人走方格 V2
- 51nod 1119 机器人走方格 V2
- 机器人走方格II
- 机器人走方格I
- 51nod--1119 机器人走方格 V2
- 51Nod 1119 机器人走方格 组合数学
- 机器人走方格 V3
- 51Nod-1122-机器人走方格 V4
- 51nod 1120 机器人走方格v3
- 51NOD 1120 机器人走方格 V3(卢卡斯定理 + 非降路径)
- 51nod 1118 机器人走方格