62.不同路径

题目描述

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

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

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

示例:

输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右

思路

1.既然机器人只能向右走和下走,我们可以将机器人的路径写到一个二维表中,然后将二维表的第一行和第一列都置为1,因为只有一种到达他们的可能性。
2.然后我们可以将其他位置的可能性推理出来,即该位置左边+该位置上边的可能性相加。
具体详情如下图:
7行3列的结果集

Java代码实现

    public int uniquePaths(int m, int n) {
        int[][] array = new int[m][n];

        //第一行置 1
        for (int i = 0; i < n; i++) {
            array[0][i] = 1;
        }

        //将第一列置 1
        for (int i = 0; i < m; i++) {
            array[i][0] = 1;
        }

        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                array[i][j] = array[i-1][j]+array[i][j-1];
            }
        }

        return array[m-1][n-1];
    }

Golang代码实现

func uniquePaths(m int, n int) int {
    vals := make([][]int,m)

    for i:=0; i<m; i++ {
        vals[i] = make([]int,n)
    }

    for i:=0; i<n; i++ {
        vals[0][i] = 1
    }

    for i:=0; i<m;i++  {
        vals[i][0]=1
    }

    for i:=1; i<m; i++ {
        for j:=1; j<n;j++  {
            vals[i][j] = vals[i-1][j] + vals[i][j-1]
        }
    }

    return vals[m-1][n-1]
}
全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
04-29 12:10
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务