【力扣/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]
}
浙公网安备 33010602011771号