機器人走方格(DP/遞迴)
阿新 • • 發佈:2019-01-23
題目描述
有一個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