1. 程式人生 > >機器人走方格(DP/遞迴)

機器人走方格(DP/遞迴)

題目描述

有一個XxY的網格,一個機器人只能走格點且只能向右或向下走,要從左上角走到右下角。請設計一個演算法,計算機器人有多少種走法。

給定兩個正整數int x,int y,請返回機器人的走法數目。保證x+y小於等於12。

測試資料:

2,2

返回值:
2
DP:
public class Robot {
	public int countWays(int x, int y) {
        // write code here
		int dp[][]=new int[x][y];
        dp[0][0] = 0;//我是從(0,0)開始的。
        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-1][j] + dp[i][j-1];//走到(i,j)則有上一步和左一步
            }
        }
        return dp[x-1][y-1];
    }
}

遞迴:

public class Robot {
    public int countWays(int x, int y) {
        // write code here
        if(x==1||y==1){
            return 1;
        }
        return countWays(x-1,y)+countWays(x,y-1);
    }
}


測試網址:http://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