5.5
明知道这种题目里边,递归的方法是过不了的,但还是不死心的用了递归,果然没有过呢。
呵呵呵呵呵。
public class Solution {
/**
* @param triangle: a list of lists of integers.
* @return: An integer, minimum path sum.
*/
public int minimumTotal(int[][] triangle) {
// write your code here
int length = triangle.length;
if(length == 0){
return 0;
}
//System.out.println("length:" + length);
if(length == 1){
return triangle[0][0];
}
int size = triangle[length-1].length;
int[][] flag = triangle;
setFlag(triangle,flag,length,size);
return flag[0][0];
}
//给出一个数组,以及开始结束的地方,获得当前数组的最小值
// 果然啊果然,用递归就会又超时了呢。
/*
public int getMin(int[][] triangle,int i,int j){
if(i < j){
return 0;
}
int m = triangle.length;//获取行数
int n = triangle[m-1].length;//获取最大的列数
if( i == m-1){
return triangle[i][j];
}
int x = getMin(triangle,i+1,j);
int y = getMin(triangle,i+1,j+1);
return triangle[i][j] + Math.min(x,y);
}
*/
public void setFlag(int[][] triangle,int[][] flag,int m,int n){
// m表示行,n表示列
flag[m-1] = triangle[m-1];
if(m <= 1){
return;
}
for(int i = m-2; i >= 0; i--){
for(int j = 0; j<=i; j++){
flag[i][j] = triangle[i][j] + Math.min(flag[i+1][j],flag[i+1][j+1]);
}
}
}
}