• Leetcode题解(21)


    62. Unique Paths

    题目

    分析:

    机器人一共要走m+n-2步,现在举个例子类比,有一个m+n-2位的二进制数,现在要在其中的m位填0,其余各位填1,一共有C(m+n-2,m-1)种可能,如果0表示向下走,1表示向右走,这样就和题目意思一样了。

    现在考虑最后一步的走法,要么向右走到达终点,要么向下走到达终点,因此

    f(m,n) = f(m,n-1)+f(m-1,n);

    代码如下(主要考虑的是大数据):

     1 class Solution {
     2 public:
     3     int uniquePaths(int m, int n) {
     4         vector<vector<int>> v(m, vector<int>(n, 1));
     5         for(int i=1; i<m; ++i){
     6             for(int j=1; j<n; ++j){
     7                 v[i][j]=v[i-1][j]+v[i][j-1];
     8             }
     9         }
    10         return v[m-1][n-1];
    11     }
    12 };

     ----------------------------------------------------------------------------分割线----------------------------------------------------------------------

    63、Unique Paths II

    题目

    分析:这一题和62题的思路是一样,都是采用递推公式f(m,n) = f(m,n-1)+f(m-1,n);只不过在障碍处,f(m,n)=0

    代码如下:

     1 class Solution {
     2 public:
     3     int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
     4         int m = obstacleGrid.size();
     5         int n = obstacleGrid[0].size();
     6         vector<vector<int>> v(m, vector<int>(n, 0));
     7         for(int i=0;i<n;)
     8             if(obstacleGrid[0][i] == 1)
     9             {
    10                 
    11                 while(i<n)
    12                 {
    13                     v[0][i] = 0;
    14                     i++;
    15                 }
    16             }    
    17             else
    18             {
    19                 v[0][i] = 1;
    20                 i++;
    21             }
    22         for(int i=0;i<m;)
    23             if(obstacleGrid[i][0] == 1)
    24             {
    25                 
    26                 while(i<m)
    27                 {
    28                     v[i][0] = 0;
    29                     i++;
    30                 }
    31             }    
    32             else
    33             {
    34                 v[i][0] = 1;
    35                 i++;
    36             }        
    37         for(int i=1; i<m; ++i){
    38             for(int j=1; j<n; ++j){
    39                 if(obstacleGrid[i][j] == 1)
    40                     v[i][j] = 0;
    41                 else
    42                     v[i][j]=v[i-1][j]+v[i][j-1];
    43             }
    44         }
    45         return v[m-1][n-1];
    46     }
    47 };

     ---------------------------------------------------------------------------------分割线-----------------------------------------------------------------

    64. Minimum Path Sum

    题目

    分析:f(m,n) = min(f(m,n-1),f(m-1,n))+a[m][n]

    代码如下

     1 class Solution {
     2 public:
     3     int minPathSum(vector<vector<int>>& grid) {
     4         int m = grid.size();
     5         int n = grid[0].size();
     6         vector<vector<int>> v(m, vector<int>(n, 0));
     7         int temp=0;
     8         
     9         for(int i = 0;i<n;i++)
    10         {
    11             v[0][i] = temp + grid[0][i];
    12             temp = v[0][i];
    13         }
    14         temp=0;
    15         for(int i = 0;i<m;i++)
    16         {
    17             v[i][0] = temp + grid[i][0];
    18             temp = v[i][0];
    19         }
    20         //v[0][0] = v[0][0]-grid[0][0];
    21         
    22         for(int i=1; i<m; ++i){
    23             for(int j=1; j<n; ++j){
    24                 if(v[i-1][j]>v[i][j-1])
    25                     temp = v[i][j-1];
    26                 else
    27                     temp = v[i-1][j];
    28                 
    29                 v[i][j] = grid[i][j]+temp;
    30             }
    31         }
    32         return v[m-1][n-1];
    33     }
    34     
    35 };
  • 相关阅读:
    jqGrid实现分页
    SSH 分页收藏待看
    java 基础笔记
    Replace using VIM, reuse part of the search pattern
    机器学习之特征工程 feature engineering 70%时间
    java8 map compute和computeIfAbsent
    抄袭,山寨,借鉴
    工作效率
    年轻无知需要付出相应代价才能成熟起来
    java8中的map
  • 原文地址:https://www.cnblogs.com/LCCRNblog/p/5171216.html
Copyright © 2020-2023  润新知