leetcode-62. 不同路径

作者: taylar_where | 来源:发表于2019-05-21 09:45 被阅读0次

想更方便阅读代码的朋友可以点这里

题目描述:

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

问总共有多少条不同的路径?

例如,上图是一个7 x 3 的网格。有多少可能的路径?

说明:m 和 n 的值均不超过 100。

示例 1:

输入: m = 3, n = 2

输出: 3

解释:

从左上角开始,总共有 3 条路径可以到达右下角。

1. 向右 -> 向右 -> 向下

2. 向右 -> 向下 -> 向右

3. 向下 -> 向右 -> 向右

示例 2:

输入: m = 7, n = 3

输出: 28

问题分析:

       这是一个寻找路径条数的问题,而且存在一个限制条件:机器人只能向右走或者向下走,这样的话就意味着如镜中不存在向左走再向右走这样无解的情况。除此我们对图进行分析可以知道,当机器人走到了与终点同一行或者同一列的位置时,就只有一条路径方案了,敏锐的人可能发现了,这个可以做为递归的终止条件,那么我们如何确定递归的划分呢?递归的划分其实在题目中已经告诉了我们方法。题目高告诉我们机器人只能向下或者向右,这是不是就意味着两条递归路径呢。

      举个实例,就假设当前机器人在坐标(1,5)处,终点在(2,6)处,这样的话,我们可以发现机器人向右走得时候只有一条路径,向下走得时候也只有一条路径,那么从点(1,5)到(2,6)就有turnRinght+turnDown=2种路径了,在向上一层,例如(1,4)到(2,6)向下只有一条路径,向右走一步就到了(1,5)由之前的结果我们就可以知道有两条路径,这样的话,(1,4)到(2,6)有3条路径。

代码如下:

class Solution {

    private int[][] cache;  //缓存 备忘录模式

    public int uniquePaths(int column, int row) {

        if(column==0||row==0){

            return 0;

        }

        cache=new int[row][column];

        return recursion(column,row,0,0);

    }

    public int recursion(int column,int row,int x,int y){

        if(column-1==y||row-1==x){

            return 1;

        }

        if(cache[x][y]!=0){

            return cache[x][y];

        }

        int right= recursion(column,row,x+1,y);

        int down= recursion(column,row,x,y+1);

        cache[x][y]=right+down;

        return right+down;

    }

}

因为单纯的使用递归会使得的时间和空间消耗过大,不满足题意,所以在代码中使用了备忘录模式,添加了一个缓存用来存储已经走过的点到终点的路径数量。

相关文章

  • leetcode-62. 不同路径

    题目 https://leetcode-cn.com/problems/unique-paths/descript...

  • leetcode-62. 不同路径

    想更方便阅读代码的朋友可以点这里。 题目描述: 一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为“...

  • 不同路径

    一个机器人位于一个 *m x n *网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或...

  • 不同的路径

    LeetCode题目链接有一个机器人的位于一个 m × n 个网格左上角。机器人每一时刻只能向下或者向右移动一步。...

  • 不同路径

    一个机器人位于一个 *m x n *网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或...

  • 不同路径

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/uniq...

  • 不同路径

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右...

  • 不同路径

    题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能...

  • 不同路径

    题目描述: 一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向...

  • 关于URL路径

    ajax 发请求时,所带的路径可以是绝对路径也可以是相对路径,不同的路径浏览器会有不同的拼接方式 当请求路径为相对...

网友评论

    本文标题:leetcode-62. 不同路径

    本文链接:https://www.haomeiwen.com/subject/aicdzqtx.html