立志每天刷leetcode一题,最近面试编程总是被屌。知耻而后勇吧!加油吧,骚年!装逼一下!
不同路径
题目
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
例如,上图是一个7 x 3 的网格。有多少可能的路径?
解题思路
动态规划思路解题
(1)确定状态:dp[i][j]是从第0,0位置走到i,j的位置总的路径数;
(2)确定状态转移方程:假设都知道了所有位置的路径数,当机器人处于位置i,j时,即求dp[i][j]总路径数时,这个状态只能从dp[i-1][j]或者dp[i][-1]转移过来。因为机器人只能向下或者向右走。
(3)确定边界条件:当i0或者j0时,只有一条路可以走。
C++代码讲解
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector> dp(m,vector(n));
for(int i=0; i< m; i++){
for(int j=0; j< n; j++){
if(i0 || j0){
dp[i][j] = 1;
}
else
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}
};
参考文献
【1】https://leetcode-cn.com/problems/unique-paths/solution/kan-liao-jue-dui-dong-de-dong-tai-gui-hua-by-stree/