首页 > 其他 > 详细

62. Unique Paths

时间:2019-03-27 22:35:16      阅读:140      评论:0      收藏:0      [点我收藏+]
  • 网址:https://leetcode.com/problems/unique-paths/

第一思路是动态规划

通过观察,每一个格子的路线数等于相邻的左方格子的路线数加上上方格子的路线数

于是我们就得到 dp[i][j] = dp[i-1][j] + dp[i][j-1] 这个状态转移方程

  • 一开始通过调用函数的方式对dp数组赋值,并且每次都判断index是否为特殊值,感觉耗时会很多,果不其然!
 1 int get_sum(vector<vector<int>> dp, int i, int j, int m, int n)
 2 {
 3     if(j == 1 || i == 1)
 4         return 1;
 5     return dp[i-1][j] + dp[i][j-1];
 6 }
 7 int uniquePaths(int m, int n)
 8 {
 9     vector<vector<int>> dp(m+1,vector<int>(n+1,0));
10     dp[1][1] = -1;
11     for(int i=1; i<=m; i++)
12     {
13         for(int j=1; j<=n; j++)
14         {
15             dp[i][j] = get_sum(dp, i, j, m, n);
16         }
17     }
18     return dp[m][n];
19 }

技术分享图片

  • 紧接着想到可以在一开始就对特殊位置赋值,并且从零开始index,少去了函数的调用以及每一次的判断流程,程序可以大幅度减少运行时间和占用空间!
  •  1 class Solution {
     2 public:
     3     int uniquePaths(int m, int n) {
     4         vector<vector<int>> dp(m,vector<int>(n,0));
     5         for(int i=0;i<m;i++)
     6             dp[i][0] = 1;
     7         for(int j=0;j<n;j++)
     8             dp[0][j] = 1;
     9         for(int i=1; i<m; i++)
    10         {
    11             for(int j=1; j<n; j++)
    12             {
    13                 dp[i][j] = dp[i-1][j] + dp[i][j-1];
    14             }
    15         }
    16         return dp[m-1][n-1];
    17     }
    18 };

    技术分享图片

     

62. Unique Paths

原文:https://www.cnblogs.com/tornado549/p/10611092.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!