问题
在n行m列的二维矩阵上从左上角移动到右下角[1,1]→[n,m],每次移动只能向右/向下移动。求有多少种不同的路径。
解法
设f(i,j)为从[1,1]到[i,j]的不同路径的数量,其中i∈[1,n],j∈[1,m]。因此有如下状态转移方程:
f(i,j)=⎩⎨⎧01f(i−1,j)+f(i,j−1)(initialize)(initialize)(loop)i∈[0,n],j∈[0,m]i=j=1i∈[1,n],j∈[1,m] (1) 初始化,设f(1,1)=1,认为从[1,1]到[1,1]的路径有1条,实际编码是设f(0,1)=f(1,0)=f(1,1)=1;
(2) 对于节点[i,j],既可以从上方[i,j−1]过来,也可以从左方[i−1,j]过来。因此f(i,j)=f(i−1,j)+f(i,j−1);
f(n,m)即为从[1,1]到[n,m]的不同路径的数量。该算法的时间复杂度是O(n×m)。
LeetCode
leetcode-62.cpp
源码
UniquePath.h
UniquePath.cpp
测试
UniquePathTest.cpp