64. Minimum Path Sum

来源:互联网 发布:医疗网络咨询招聘 编辑:程序博客网 时间:2024/06/05 15:53

题目

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.

解答

方法一:递归

这个方法会超过时间限制
调用moveStep(grid,1,1);

int moveStep(vector<vector<int>>& grid, int m, int n) {    int row = grid.size();    int col = grid[0].size();    int a = 0;    int b = 0;    if (row == m && col == n)        return grid[m - 1][n - 1];    if (m < row && n < col) {         a = moveStep(grid, m + 1, n);         b = moveStep(grid, m, n + 1);         if (a > b)             a = b;    }    else if(m < row && n == col) {        a = moveStep(grid, m + 1, n);       }    else if (m == row && n < col) {        a = moveStep(grid, m, n + 1);    }    return grid[m - 1][n - 1] + a;}

方法二:动态规划

int minPathSum(vector<vector<int> > &grid) {    if (grid.size() == 0)        return 0;    vector<vector<int>> res(grid);    int i, j;    for (int j = 1; j<res[0].size(); ++j) {        res[0][j] += res[0][j - 1];    }    for (int j = 1; j<res.size(); ++j) {        res[j][0] += res[j - 1][0];    }    for (i = 1; i<res.size(); ++i) {        for (int j = 1; j<res[i].size(); ++j) {            res[i][j] = min(res[i - 1][j], res[i][j - 1]) + grid[i][j];        }    }    return res[grid.size() - 1][grid[0].size() - 1];    }
0 0
原创粉丝点击