题解 | #年终奖#

年终奖

http://www.nowcoder.com/practice/72a99e28381a407991f2c96d8cb238ab

参考了别人的答案编写的。 不过理解上重新理解了一下。 实际上对首行和首列进行初始化,因为首行和首列的里的每个位置累计的礼品价值是固定的。 如此就得到了固定的X,Y轴,然后接下来就可以基于这个X,Y轴上的点累加往下走,X,Y两层循环走遍每一个点,每走一个点都记录下当前点的最大价值(从上面来和从左边来哪个更大,即上面的点和左边的点哪个累计的礼品价值更大,然后加上当前点的值形成新的最大累加值),一直走到右下角为止。

import java.util.*;

public class Bonus { public int getMost(int[][] board) { // write code here for(int i=0;i<board.length;i++){ for(int j = 0;j<board[0].length;j++){ if(i == 0 && j == 0){ continue; } if(i == 0){ board[i][j] += board[i][j-1]; } else if(j == 0){ board[i][j] += board[i-1][j]; }else{ int tempUp = board[i-1][j]; int tempLeft = board[i][j-1]; board[i][j] += max(tempUp,tempLeft); }

        }
    }
    return board[board.length-1][board[0].length-1];
}
private int max(int a,int b){
    if(a>b){
        return a;
    }else{
        return b;
    }
}

}

全部评论

相关推荐

牛客868257804号:九个中铁八个中建
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务