【力扣/Kotlin】198. 打家劫舍 动态规划题解

经典的动态规划题目,适合入门动态规划
基本思路
根据动态规划的做法,先求出初始值,然后通过找规律发现有n个房屋时可得的最大的数字的公式。可以通过当前n的数字推导出n后面一两位的最大数字,重复这个过程就可以最终推导出指定n可得的最大数字max。

当n=1,有一个房屋时,max唯一
当n=2时,max是n=1时的max,或者第二个房屋的数字

继续推导,可以发现有n个房屋时可得最大数字是有n-2个房屋时的最大值+第n个房屋的值,或者还是有n-1个房屋时的最大值。
可以由此写出递推公式,然后在循环中用初始值推导出结果。

    fun rob(nums: IntArray): Int {
        var dp =IntArray(100)
        var len = nums.size - 1
        if(len==0)return nums[0]
        dp[0] = nums[0]
        dp[1] = Math.max(dp[0], nums[1])
        for (i: Int in 2..len)
            dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i])
        return dp[len]
    }

posted on 2022-08-03 15:44  安逐悲  阅读(41)  评论(0)    收藏  举报

导航