triangle

Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.

For example, given the following triangle

[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]

The minimum path sum from top to bottom is11(i.e., 2 + 3 + 5 + 1 = 11).

Note:
Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.

/不能选左下方的 
int mini(vector<vector<int> > &triangle,int row,int pos);
 int minimumTotal(vector<vector<int> > &triangle) {
        //递归 求每一层的下面所有层的最小值
        return mini(triangle,0,0);
    }

    //pos为上一行元素的位置 限制当前行能选择的元素
int mini(vector<vector<int> > &triangle,int row,int pos){
        int minr,minleft,minright;

        //最后一行时不需要递归
        if(row==(triangle.size()-1)){
           minr=triangle[row][pos];
           // if(pos>0)
        //  minr=min(triangle[row][pos-1],minr);
            if(pos<(triangle.size()-1))
           minr=min(minr,triangle[row][pos+1]);

          return minr;
        }

        //正下方
       minr=triangle[row][pos]+mini(triangle,row+1,pos);
       /* if(pos>0)//左下方
        {
            minleft=triangle[row][pos-1]+mini(triangle,row+1,pos-1);
            minr=minr<minleft?minr:minleft;}*/
        //右下方
        if(pos<(triangle[row].size()-1)){
         minright=triangle[row][pos+1]+mini(triangle,row+1,pos+1);
        minr=minr<minright?minr:minright;}

        return minr;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值