LeetCode 64 Minimum Path Sum--In C++
阿新 • • 發佈:2019-01-27
思路:
用動態規劃的話,速度是最快的。
狀態遷移方程:mat[i][j] = (mat[i][j + 1]<mat[i + 1][j] ? mat[i][j + 1] : mat[i + 1][j]) + grid[i][j];
即要找到一個格子的下邊和右邊較小的值,在加上grid中給他的值,作為mat中這個位置的最終值。
int minPathSum(vector<vector<int>>& grid) { int m = grid.size(); if (m == 0){ return 0; } int n = grid[0].size(); int** mat = new int*[m](); for (int i = 0; i < m; i++){ mat[i] = new int[n](); } mat[m - 1][n - 1] = grid[m-1][n-1]; for (int i = m - 1; i >= 0; i--){ for (int j = n - 1; j >= 0; j--){ if (i == m - 1 && j == n - 1){ continue; } if (j == n - 1){ mat[i][j] = mat[i + 1][j] + grid[i][j];//最底最右的邊,等於自身值加前空的值 } else if (i == m - 1){ mat[i][j] = mat[i][j + 1] + grid[i][j]; } else{ mat[i][j] = (mat[i][j + 1]<mat[i + 1][j] ? mat[i][j + 1] : mat[i + 1][j]) + grid[i][j]; } } } int result = mat[0][0]; for (int i = 0; i < m; i++){ delete[] mat[i]; } delete[] mat; return result; }