62. Unique Paths java solutions

A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).

The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).

How many possible unique paths are there?

Above is a 3 x 7 grid. How many possible unique paths are there?

Note: m and n will be at most 100.

Subscribe to see which companies asked this question

 1 public class Solution {
 2     public int uniquePaths(int m, int n) {
 3         int[][] ans = new int[m][n];//可对数据优化,使用一维数组
 4         for(int i = 0; i< m;i++){
 5             ans[i][0] = 1;
 6         }
 7         for(int i = 0; i< n;i++){
 8             ans[0][i] = 1;
 9         }
10         for(int i = 1;i < m; i++){
11             for(int j = 1; j< n; j++){
12                 ans[i][j] = ans[i][j-1] + ans[i-1][j];
13             }
14         }
15         return ans[m-1][n-1];
16     }
17 }

本地是最最简单的DP,非常有学习和理解的价值。

解法二: 可采用组合数学的解法。

robot从第(1,1)点走到了第(m,n)点。它只能向右或者向下,不管它怎么走,它必然向右走了m-1步,向下走了n-1步。一共走了m-1+n-1步。而不同的走法,本质是向右或者向下构成的m-1+n-1长度的序列不同。走法的总数目,本质上是m-1+n-1个总步数中选出m-1个代表向右走的走法的个数,这个问题的另一种表述是,走法的总数目,本质上是m-1+n-1个总步数中选出n-1个代表向下走的走法的个数。这其实正是组合的小性质。

C(a+b, a)=C(a+b, b)
这样题目就转换为了一个数学计算了,求C(m-1+n-1, m-1)。

数学参考解法:http://blog.csdn.net/feliciafay/article/details/20197903

原文地址:https://www.cnblogs.com/guoguolan/p/5616524.html