机器人走方格

此博客链接:https://www.cnblogs.com/ping2yingshi/p/14173360.html

机器人走方格

题目链接:https://www.nowcoder.com/practice/e8bb8e68434e42acbcdff0341f2a32c5?tpId=8&&tqId=11033&rp=1&ru=/ta/cracking-the-coding-interview&qru=/ta/cracking-the-coding-interview/question-ranking 。

题目

给定两个正整数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];    
    }

 

结果

 

posted @ 2020-12-22 15:32  萍2樱释  阅读(158)  评论(2编辑  收藏  举报