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.
Example:
Input:[? [1,3,1],? [1,5,1],? [4,2,1]]Output:7Explanation:Because the path 1→3→1→1→1 minimizes the sum.
class Solution {
? ? public int minPathSum(int[][] grid) {
? ? ? ? if (grid.length == 0) return 0;
? ? ? ? int sum[][] = new int[grid.length][grid[0].length];
? ? ? ? for (int i = 0; i < grid.length; i++) {
? ? ? ? ? ? for (int j = 0; j < grid[0].length; j++) {
? ? ? ? ? ? ? ? if (i != 0 && j != 0) sum[i][j] = grid[i][j] + Math.min(sum[i - 1][j], sum[i][j - 1]);
? ? ? ? ? ? ? ? else if (i == 0 && j == 0) sum[i][j] = grid[i][j];
? ? ? ? ? ? ? ? else if (i == 0) sum[i][j] = grid[i][j] + sum[i][j - 1];
? ? ? ? ? ? ? ? else if (j == 0) sum[i][j] = grid[i][j] + sum[i - 1][j];
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? // System.out.println(Arrays.deepToString(sum));
? ? ? ? return sum[grid.length - 1][grid[0].length - 1];
? ? }
}
(這題看了答案鹃唯,我的答案排名83%峻黍,靠前的跟我看起來差不多占卧,也不知道是哪里有不同)
第二種解法:
與第一種類似瘦穆,但是只記錄一行的dp就行郑什,空間復(fù)雜度減少,但是個人感覺這個代碼稍微難理解一點:
class Solution {
? ? public int minPathSum(int[][] grid) {
? ? ? ? if (grid.length == 0) return 0;
? ? ? ? int[] dp = new int[grid[0].length];
? ? ? ? for (int? i = 0; i < grid.length; i++) {
? ? ? ? ? ? for (int j = 0; j < grid[0].length; j++) {
? ? ? ? ? ? ? ? if (j == 0) {
? ? ? ? ? ? ? ? ? ? dp[j] = dp[j] + grid[i][j];
? ? ? ? ? ? ? ? } else if (i == 0) {
? ? ? ? ? ? ? ? ? ? dp[j] = dp[j - 1] + grid[i][j];
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? dp[j] = Math.min(dp[j - 1], dp[j]) + grid[i][j];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return dp[grid[0].length - 1];
? ? }
}