LeetCode 198. 打家劫舍

Posted 菜鸡的世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 198. 打家劫舍相关的知识,希望对你有一定的参考价值。

https://leetcode-cn.com/problems/house-robber/

 

经典dp问题.

    /**
     * 打家劫舍问题,这个是这类问题中最简单的一题
     * @param nums
     * @return
     */
    public int rob(int[] nums) {
        int length = nums.length;
        //处理特殊情况,避免下面初始化dp数组的时候引起越界问题
        if(length == 0){
            return 0;
        }else if(length == 1){
            return nums[0];
        }
        int[] dp = new int[length];
        //对于第一家,只有打劫才是最好的情况,所以直接加上第一家的钱。
        dp[0] = nums[0];
        //对于第二家,我们要看第一家和第二家那家的钱最多 ,取最多的那家打劫。
        dp[1] = Math.max(dp[0],nums[1]);
        for(int i = 2; i < length; i++){
            //对于第i家,因为不能连续打劫,所以要取max(打劫第i-1家,打劫第i-2家+第i家)的值。
            dp[i] = Math.max(dp[i-1],dp[i-2] + nums[i]);
        }
        //因为打劫完钱最多的肯定在最后一家或者倒数第二家,所以返回其较大值。
        return Math.max(dp[length-1],dp[length-2]);
    }

 

以上是关于LeetCode 198. 打家劫舍的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 198. 打家劫舍

LeetCode 198. 打家劫舍

Leetcode 198. 打家劫舍

Leetcode 198. 打家劫舍

LeetCode 198 打家劫舍

我用java刷 leetcode 198. 打家劫舍