题目
链接:
原题
来源:牛客网
有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。
给定两个正整数int x,int y,请返回机器人的走法数目。保证x+y小于等于12。
代码:
//机器人
public static int count(int x,int y){
if(x==1||y==1){
return 1;
}
//count(x-1,y)代表向下走一步后所有的情况,count(x,y-1)代表向右走一步后的所有情况
return count(x-1,y)+count(x,y-1);
}
分析
机器人每走一步都有两种走法,要么走右面,要么有下面。
如果走右面,那么矩阵(网格)就缩小为X*(Y-1)
如果走下面,那么矩阵(网格)就缩小为(X-1)*Y
试想一直走下去,当矩阵只有一行或一列的时候,机器人就只有一种走法。(是不是很想递归出口呢)
矩阵的缩小是问题化简
递归出口是矩阵为一行或一列
那么我们就可以假设机器人的第一步分为两种情况
(1)向下走一步,矩阵缩小为(X-1) * Y
(2)向右走一步,矩阵缩小为X * (Y-1)
我们只考虑机器人的第一步,将这两种情况的走法相加起来就是机器人的所有走法,因为随着递归,矩阵最终会变为一列或一行,返走回数值1供上层计算,最终递归出来的就是走法数!
如果有错误请提醒我呀