题目来源
https://www.nowcoder.com/questionTerminal/e8bb8e68434e42acbcdff0341f2a32c5
题目描述
有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。
给定两个正整数int x,int y,请返回机器人的走法数目。保证x+y小于等于12。
测试样例:
2,2
返回:2
解题思路-递归
- X*Y个网格,且X+Y总数小于等于12。
- 出口:如果x/y为1,则网格是一行/一列,只能向右/向下直走。都只有一种方式。
- 否则,从(0,0)格子坐标开始走,有两种选择:
-
- 先向右走一步,则到了(0,1)格子;
-
- 先向下走一步,则到了(1,0)格子;
- 通式为:当前在
(x,y)
格子,则有两种走法:(x,y-1)
和(x-1,y)
两种;
问题也就变成求(x,y-1)
格子走到右下角,和(x-1,y)
格子走到右下角有几种走法。显然是递归思想。
实现代码
import java.util.*;
public class Robot{
public int countWays(int x, int y) {
//1.出口,只有一行或者一列
if (x==1 || y==1) {
return 1;
} else {
//2.两种走法:向右走或者向下走
return countWays(x,y-1)+ countWays(x-1,y);
}
}
}