此博客链接:https://www.cnblogs.com/ping2yingshi/p/14173360.html
机器人走方格
题目
给定两个正整数int x,int y,代表一个x乘y的网格,现有一个机器人要从网格左上角顶点走到右下角,每次只能走一步且只能向右或向下走,返回机器人有多少种走法。保证x+y小于等于12。
测试样例:
2,2
返回:2
题解
此题是动态规划的常规思路,每走到一个方格时,机器人都是由左边和上边到达到达的方格,取从左边和上面走的之和。
说明:格子的坐标为(i,j),走法为f(n);
状态转移方程:f(i)(j)=f(i-1)(j)+f(i)(j-1);初始条件为f(0)(0)=1;
这里需要注意的是当格子只有一个行或者一列的话,表示只有一种走法。
代码
public class Robot { public int countWays(int x, int y) { // write code here int[][] f=new int[x][y]; f[0][0]=1; for(int i=1;i<x;i++){ f[i][0]=f[i-1][0]; } for(int i=1;i<y;i++){ f[0][i]=f[0][i-1]; } for(int i=1;i<x;i++){ for(int j=1;j<y;j++){ f[i][j]=f[i-1][j]+f[i][j-1]; } } return f[x-1][y-1]; }