• Minimum Path Sum [LeetCode]


    Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.

    Note: You can only move either down or right at any point in time.

    Summary: DP, calucate the minimun sum from start point to every cell unitil we traverse every cell, then just output the last cell.

     1    void goRight(int row_index, int column_index, int **grid_sum, vector<vector<int> > &grid) {
     2         column_index ++ ;
     3         int sum = grid_sum[row_index][column_index - 1] + grid[row_index][column_index];
     4         if(grid_sum[row_index][column_index] == -1 || sum < grid_sum[row_index][column_index])
     5             grid_sum[row_index][column_index] = sum;
     6     }
     7     
     8     void goDown(int row_index, int column_index, int **grid_sum, vector<vector<int> > &grid ) {
     9         row_index ++;
    10         int sum = grid_sum[row_index -1][column_index] + grid[row_index][column_index];
    11         if(grid_sum[row_index][column_index] == -1 || sum < grid_sum[row_index][column_index])
    12             grid_sum[row_index][column_index] = sum;
    13     }
    14     
    15     int minPathSum(vector<vector<int> > &grid) {
    16         if( grid.size() <= 0 || grid[0].size() <=0){
    17             return 0;
    18         }else if ( grid.size() == 1){
    19             int sum = 0;
    20             for (auto item : grid[0]) 
    21                 sum += item;
    22             return sum;
    23         }else if (grid.size() > 1 && grid[0].size() == 1) {
    24             int sum = 0 ;
    25             for ( auto item : grid)
    26                 sum += item[0];
    27             return sum;
    28         }else {
    29             int row_size = grid.size();
    30             int column_size = grid[0].size();
    31      
    32             int  ** grid_sum = new int *[row_size];
    33             for( int i=0; i< row_size; i++ )
    34             {
    35                 grid_sum[i] = new int [column_size]  ;
    36             }
    37 
    38             for(int i =0 ; i< row_size; i ++){
    39                 for(int j =0; j < column_size; j++)
    40                     grid_sum[i][j] = -1;
    41             }
    42             
    43             for(int i = 0; i <= (row_size -1 + column_size -1); i++) {
    44                 if (i == 0) {
    45                     int row_index = 0;
    46                     int column_index = 0;
    47                     grid_sum[0][0] = grid[0][0];
    48                     if(row_index + 1 < row_size)
    49                         goDown(row_index, column_index, grid_sum, grid);
    50                     if(column_index + 1 < column_size)
    51                        goRight(row_index, column_index, grid_sum, grid);
    52                 }else {
    53                     int row_index = 0;
    54                     int column_index = 0;
    55                     for(row_index = 0; row_index <= i; row_index ++ ){
    56                         if(row_index >= row_size )
    57                             continue;
    58                         column_index = i - row_index;
    59                         if(column_index >= column_size)
    60                             continue;
    61                         
    62                         if(row_index + 1 < row_size)
    63                             goDown(row_index, column_index, grid_sum, grid);
    64                         if(column_index + 1 < column_size)
    65                             goRight(row_index, column_index, grid_sum, grid);
    66                     }
    67                 }
    68             }
    69 
    70             int sum = grid_sum[row_size - 1][column_size - 1];
    71              for( int i=0; i< row_size; i++ ) {
    72                 delete [] grid_sum[i];
    73             }
    74             delete grid_sum;
    75             return sum; 
    76         }
    77     }
  • 相关阅读:
    SLF4J + logback 实现日志输出和记录
    Log4j配置文件
    通过maven的<profile>标签,打包不同配置的变量包
    单点登录(SSO)原理
    MyBatis拦截器(插件)分页
    导航栏pop拦截
    swift 基础小结01 --delegate、Optional、GCD的使用、request请求、网络加载图片并保存到沙箱、闭包以及桥接
    转载-iOS SDK开发
    leaks工具查找内存泄露
    weex stream 之fetch的get、post获取Json数据
  • 原文地址:https://www.cnblogs.com/guyufei/p/3435613.html
Copyright © 2020-2023  润新知