c_cpp [dp] [path] [matrix]具有非负数的2d矩阵/网格中的最小路径和。找到从左上角到右下角的路径,最小化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp [dp] [path] [matrix]具有非负数的2d矩阵/网格中的最小路径和。找到从左上角到右下角的路径,最小化相关的知识,希望对你有一定的参考价值。

// DP, space O(M*N)
int minPathSum(vector<vector<int>> &grid) {
	if(grid.empty()) return 0;
	int m = grid.size(), n = grid[0].size();
	vector<vector<int>> sum(m, vector<int>(n, 0));
	sum[0][0] = grid[0][0];
	for(int c=1; c<n; c++) sum[0][c] = sum[0][c-1] + grid[0][c];
	for(int r=1; r<m; r++) sum[r][0] = sum[r-1][0] + grid[r][0];
	for(int r=1; r<m; r++) {
		for(int c=1; c<n; c++) {
			sum[r][c] = grid[r][c] + min(sum[r-1][c], sum[r][c-1]);
		}
	}
	return sum[m-1][n-1];
}

// DP, space O(N)
int minPathSum(vector<vector<int>>& grid) {
    int M = grid.size(), N = grid[0].size();
    vector<int> row(N, 0);
    row[0] = grid[0][0];                    // gist
    for(int c=1; c<N; c++) 
        row[c] = row[c-1] + grid[0][c];
    for(int r=1; r<M; r++) {
        row[0] += grid[r][0];               // gist 
        for(int c=1; c<N; c++) {
            row[c] = min(row[c], row[c-1]) + grid[r][c];
        }
    }
    return row[N-1];
}

以上是关于c_cpp [dp] [path] [matrix]具有非负数的2d矩阵/网格中的最小路径和。找到从左上角到右下角的路径,最小化的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 240.搜索2D Matrix II

c_cpp 54. Spiral Matrix.cpp

c_cpp 54. Spiral Matrix.cpp

c_cpp 54. Spiral Matrix.cpp

c_cpp 54. Spiral Matrix.cpp

c_cpp 54. Spiral Matrix.cpp