leetcode [House Robber]

来源:互联网 发布:ipad pro app 知乎 编辑:程序博客网 时间:2024/06/06 05:13
public class Solution {/* 可以看到下面的解法,正确的解法逻辑是很清晰的,最先想解这题的时候想到每四个房子分为一组, 分别为1+3,2+4,1+4的组合,然后去更新,但是逻辑很不清晰          下面的正确解法中用prevNo,prevYes来模拟了偷盗当前房子可能的情况 */    public int rob(int[] nums) {    int res = 0;        int prevNo = 0;//用来记录当前房子的左侧邻居没有被偷盗时的盗取总额        int prevYes = 0;//用来记录当前房子的左侧邻居被偷盗时的盗取总额        //采用动态规划,确保到任意房子i时的盗取总额是最大的,后面的房子以前面的为基础,这就是动态规划的主要思想        for(int i = 0; i < nums.length; i++){        //不能通过if(preYes > preNo)这个条件来判断当前房子i的左侧邻居是否被偷盗        int temp = prevNo + nums[i];//用temp来保存若当前房子i的左侧邻居没有被偷盗时,金额发生的变化        //由于当前房子i在可盗取(左侧邻居没有被盗取)时,不一定非要被盗取        //当前房子之后也有两种选择        //更新prevNo(当前房子没有被盗取)        prevNo = Math.max(prevYes, prevNo);        //更新prevYes(当前房子被盗取)        prevYes = temp;//隐含了左侧邻居没有被盗取的情况,因为nums[i]加的是prevNo                res = Math.max(prevYes, prevNo);//确保到任意房子i时的盗取总额是最大的,这一句其实没什么意义        }        return res;    }}


0 0
原创粉丝点击