机器人走方格I

题目

链接:
原题
来源:牛客网

有一个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供上层计算,最终递归出来的就是走法数!

如果有错误请提醒我呀

发布了57 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42419462/article/details/103134512