109 - 数字三角形

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]);
            }
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值