剑指offer47

在这里插入图片描述
这道题和leetcode上的一个机器人走路路径的问题相似,都是用动态规划来解决。

方法一:
维护一个二维数组,每一个位置的数字表示到达这个位置的最大值。
代码:

int [][] d=new int[r][c];
        for(int i=0;i<c;i++)
        {
            if(i==0) d[0][i]=grid[0][i];
            
            else
            {d[0][i]=d[0][i-1]+grid[0][i];}
        }
        for(int i=0;i<r;i++)
        {
            if(i==0) d[i][0]=grid[i][0];
            else
            {
                d[i][0]=d[i-1][0]+grid[i][0];
            }
        }
        for(int i=1;i<r;i++)
        {
            for(int j=1;j<c;j++)
            {
                d[i][j]=Math.max((d[i][j-1]+grid[i][j]),(d[i-1][j]+grid[i][j]));
            }
        }
        return d[r-1][c-1];

方法二:
思路相同,但是不维护一个二维数组,用一个一维的数组就好。
代码:

int r=grid.length;
        int c=grid[0].length;
        int[] cur=new int[c];
       // int pre=int[c];
            for(int i=0;i<c;i++)
        {
            if(i==0) cur[i]=grid[0][i];
            
            else
            {cur[i]=cur[i-1]+grid[0][i];}
        }
        for(int i=1;i<r;i++)
        {
            for(int j=0;j<c;j++)
            {
                if(j==0) cur[j]=cur[j]+grid[i][j];
                else
                {
                    cur[j]=Math.max((cur[j-1]+grid[i][j]),(cur[j]+grid[i][j]));
                }
                
            }
        }
        return cur[c-1];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值