LintCode UniquePaths 不同的路径

原创 2015年07月10日 14:17:09

中文描述:
有一个机器人的位于一个M×N个网格左上角(下图中标记为’Start’)。
机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为’Finish’)。
问有多少条不同的路径?

start 1.2 1.3 1.4 1.5 1.6 1.7
2.1
3.1 3.2 3.3 3.4 3.5 3.6 end

法一:数学公式法
机器人一共要走m+n-2步。
我们要从这m+n-2步中挑出m-1步向下走,或者挑出n-1步向右走。
由于挑出的步数顺序唯一,即不必考虑每步之间顺序,即应使用组合方法而非排列方法。
数序公式为C((m+n-2),(m-1)) = C((m+n-2),(n-1))
注意:计算阶乘可能会超出int甚至long的表达范围。

法二:动态规划方法
第一步:

1 1 1 1 1 1 1

第二步:

1 1 1 1 1 1 1
1 2 3 4 5 6 7

第三步:

1 1 1 1 1 1 1
1 2 3 4 5 6 7
1 3 6 10 15 21 28

如果是二维数组则
dp[i][j] = dp[i-1][j] + dp[i][j-1]
可以看出每一行只使用一次,考虑是否可以重复使用一行,发现可行。
dp[j] = dp[j] + dp[j-1]

public class Solution {
    /**
     * @param n, m: positive integer (1 <= n ,m <= 100)
     * @return an integer
     */
    //法一:计算式m--;n--;求C(m+n,n) = (m+n)!/(m!n!)
    public int uniquePaths(int m, int n) {
        if(m == 1 || n == 1) return 1;
        m--; n--;
        long factorial = 1;
        for(int i = 1; i <= n; i++) {
            factorial = factorial*(m + i)/i;
        }
        return (int)factorial;
    }
    //法二:动态规划
    public int uniquePaths(int m, int n) {
        int dp[] = new int[n];
        for(int i = 0; i < n; i++) {
            dp[i] = 1;
        }
        for(int i = 1; i < m; i++) {
            for(int j = 1; j < n; j++) {
                dp[j] += dp[j-1];
            }
        }
        return dp[n-1];

    }
}

不同的路径

有一个机器人的位于一个M×N个网格左上角(下图中标记为'Start')。 机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为'Finish')。 问有多少条不同的...
  • fk5431
  • fk5431
  • 2015年12月24日 19:45
  • 764

LintCode 不同的路径

不同的路径有一个机器人的位于一个M×N个网格左上角(下图中标记为’Start’)。 机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为’Finish’)。 问有多少条...

不同的路径 II

容易 不同的路径 II 27% 通过 跟进“不同的路径”: 现在考虑网格中有障碍物,那样将会有多少条不同的路径? 网格中的障碍和空位置分别用1和0来表示。 您在真实的面试中是否遇到过这个题?...

【LeetCode】Unique Paths 解题报告

【题目】 A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram belo...
  • ljiabin
  • ljiabin
  • 2014年12月08日 17:19
  • 3955

lintcode-不同的路径II-115

跟进“不同的路径”: 现在考虑网格中有障碍物,那样将会有多少条不同的路径? 网格中的障碍和空位置分别用1和0来表示。 样例 如下所示在3x3的网格中有一个障碍物: ...

lintcode-不同的路径-114

有一个机器人的位于一个M×N个网格左上角(下图中标记为'Start')。 机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为'Finish')。 问有多少条不同的...

不同的路径

题目描述:有一个机器人的位于一个M×N个网格左上角。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。问有多少条不同的路径? 跟之前的那道“最小路径和”(详见:点击打开链接)是一...

人工智能: 自动寻路算法实现(一、广度优先搜索)

前言随着人工智能技术的日益发达,我们的生活中也出现了越来越多的智能产品。我们今天要关注的是智能家居中的一员:扫地机器人。智能扫地机器人可以在主人不在家的情况下自动检测到地面上的灰尘,并且进行清扫。有些...

LintCode -- 不同的路径

LintCode -- unique-paths(不同的路径) 原题链接:http://www.lintcode.com/zh-cn/problem/unique-paths/ ...
  • chan15
  • chan15
  • 2015年09月22日 17:16
  • 673

【LeetCode-面试算法经典-Java实现】【062-Unique Paths(唯一路径)】

【062-Unique Paths(唯一路径)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  A robot is located at the top-left cor...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LintCode UniquePaths 不同的路径
举报原因:
原因补充:

(最多只允许输入30个字)