有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。给定两个正整数int x,int y,请返回机器人的走法数目。保证x+y小于等于12。
这是一道比较基础的动态规划题目,首先确定一下用什么数据结构来解决这样的一个问题,当然是二维数组了;然后我们再看,d[i][j]的位置只可能由两种可能性,一个是由d[i][j-1]向下移动过来,另一种是由d[i-1][j]向右移动得到,所以我们很容易得到这么一个式子:d[i][j]=d[i-1][j]+d[i][j-1],下面给出代码:
package fff;
public class Different {
public static 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 j=0;j<y;j++){
dp[0][j]=1;
}
for(int i=1;i<x;i++){
for(int j=1;j<y;j++){
dp[i][j]=dp[i-1][j]+dp[i][j-1];//dp means possibility
}
}
return dp[x-1][y-1];
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(countWays(3,3));
}
}