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];

    }
}

LintCode 不同的路径

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

lintcode-不同的路径II-115

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

LintCode UniquePaths 不同的路径

中文描述: 有一个机器人的位于一个M×N个网格左上角(下图中标记为’Start’)。 机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为’Finish’)。 问有多...
  • wutingyehe
  • wutingyehe
  • 2015年07月10日 14:17
  • 1710

LintCode -- 不同的路径

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

不同的路径

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

不同的路径 II

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

lintcode(115)不同的路径2

问题描述: "不同的路径" 的跟进问题: 现在考虑网格中有障碍物,那样将会有多少条不同的路径? 网格中的障碍和空位置分别用 1 和 0 来表示。 示例: 如下所示在3x3的网格中有一个障碍...
  • sunday0904
  • sunday0904
  • 2017年03月16日 07:56
  • 375

不同的路径

不同的路径 40% 通过 有一个机器人的位于一个M×N个网格左上角(下图中标记为'Start')。 机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的...
  • xiang1431
  • xiang1431
  • 2015年05月17日 20:49
  • 945

python_lintcode_697Check Sum of Square Numbers_114不同的路径

python_lintcode_697Check Sum of Square Numbers_114不同的路径
  • xiongxu3381
  • xiongxu3381
  • 2017年10月07日 18:59
  • 111

LintCode 114 不同的路径

本人电子系,只为一学生。心喜计算机,小编以怡情。有一个机器人的位于一个M×N个网格左上角(下图中标记为’Start’)。 机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标...
  • Jason__Liang
  • Jason__Liang
  • 2016年12月25日 15:14
  • 215
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LintCode UniquePaths 不同的路径
举报原因:
原因补充:

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