classSolution{ publicintminimumTotal(List<List<Integer>> triangle){ int m = triangle.size(); if(m == 0){ return0; } int n = triangle.get(m - 1).size();
classSolution{ publicintminimumTotal(List<List<Integer>> triangle){ int m = triangle.size(); if(m == 0){ return0; } int n = triangle.get(m - 1).size();
int[] dp = newint[n]; dp[0]= triangle.get(0).get(0); int up = 0, upLeft = 0; for(int i = 1; i < m; i++){ for(int j = 0; j < i + 1; j++){ up = dp[j]; if(j == 0){ dp[j] = up + triangle.get(i).get(j); }elseif(j == i){ dp[j] = upLeft + triangle.get(i).get(j); }else{ dp[j] = Math.min(up, upLeft) + triangle.get(i).get(j); } //第 j + 1 个元素的左上元素等于第 j 个元素上方的元素 upLeft = up; } }
int min = dp[0]; for(int i = 1; i < n; i++){ min = Math.min(min, dp[i]); } return min; } }