题目内容
62 Unique Paths
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.
题目来源
题目简述
计算机器人从起始点到达终点不同路径的总数
题目分析
简单的组合数计算因为数字溢出显然不可以。
我们假设起点为(0,0),终点为(m,n)。设到达(x,y)点的路径总数为A(x,y)。显然A(x,y)=A(x-1,y)+A(x,y-1)。根据这个状态转移方程从头计算即可得到A(m,n)。
但是我们可以使用一维数组B[x]记录一行行内每个坐标数据,并对每行循环更新,大大减少空间复杂度。利用上式对B[x]进行计算时,注意到等号右边A(x-1,y)就是本次循环中刚刚的更新的B[x-1],A(x,y-1)就是上次循环更新的B[x],本次循环该数据尚未更新。整理得B[x]=B[x]+B[x-1]。外循环进行n-1次后得到B[m]就是起点到终点的路径总数。
代码示例
class Solution {
public:
int uniquePaths(int m, int n) {
vector<int> v(m,1);
for(int i=1;i!=n;i++)
{
for(int j=1;j!=m;j++)
v[j]+=v[j-1];
}
return v[m-1];
}
};