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