1. 程式人生 > 實用技巧 >機器人走方格

機器人走方格

此部落格連結: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

題目

給定兩個正整數intx,inty,代表一個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]; }

結果