114 不同的路径
Posted 唐的糖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了114 不同的路径相关的知识,希望对你有一定的参考价值。
原题网址:https://www.lintcode.com/problem/unique-paths/description
描述
有一个机器人的位于一个 m × n 个网格左上角。
机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。
问有多少条不同的路径?
n和m均不超过100
您在真实的面试中是否遇到过这个题?
样例
给出 m = 3
和 n = 3
, 返回 6
.
给出 m = 4
和 n = 5
, 返回 35
.
标签
数组
动态规划(DP)
思路:动态规划。创建二维数组dp【m】【n】,则dp【i】【j】表示机器人从左上角走到点(i,j)的不同路径数。
状态转移方程为:dp【i】【j】= dp【i-1】【j】+ dp【i】【j-1】。
初始dp【0】【0】=1;
最后return dp【m-1】【n-1】。
AC代码:
class Solution { public: /** * @param m: positive integer (1 <= m <= 100) * @param n: positive integer (1 <= n <= 100) * @return: An integer */ int uniquePaths(int m, int n) { // write your code here if (m<=0||n<=0) { return 0; } vector<vector<int>> dp(m,vector<int>(n,0)); dp[0][0]=1; for (int i=1;i<m;i++) { dp[i][0]=1; } for (int j=1;j<n;j++) { dp[0][j]=1; } 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]; } };
其他方法:https://blog.csdn.net/wutingyehe/article/details/46830271
优化:dp数组可以将至一维。
创建动态数组dp【n】,则 dp[j] 表示机器人到达 i 行第 j 列有多少种不同路径。
第一行dp值均为1;
此后的每一行,遍历列,当前列的dp值等于 上一行同一列的dp值(dp【j】)加上同一行上一列的dp值(dp【j-1】)。
即状态转移方程为dp【j】= dp【j】(注意dp【j】未赋值更新前表示的是上一行同一列的数值)+ dp【j-1】。
最后return dp【n-1】。
代码见上面链接。
以上是关于114 不同的路径的主要内容,如果未能解决你的问题,请参考以下文章