题目描述:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?
解题思路:
1 动态规划
创建一个二维数组 dp[m][n] 代表从网格的左上角达到网格右下角的不同路径数。
dp[m][n]=dp[m-1][n]+dp[m][n-1];
package cn.xpleaf.spider; public class Timu
{ public static int uniquepath(int m,int n) { int[][] dp=new int[m][n]; int x=0; while(x<n) { dp[0][x]=1; x++; } x=0; while(x<m) { dp[x][0]=1; x++; } for(int i=1;i<m;i++) { for(int j=1;j<n;j++) { dp[i][j]=dp[i-1][j]+dp[i][j-1]; } } return dp[m-1][n-1]; } }
2 其实这个题可以直接用数学的方法解出来。
机器人到达右下角需要从往右边走n-1步,需要往下走m-1步。总共需要走 m+n-2 步。设往右走记为 1 ,往下走记为 0;
其实就是从 m+n-2 个 1里面挑出 m-1个数变为0。 即为 。