leetcode 第198题-打家劫舍

package leetcode

func rob(nums []int) int {
    if len(nums) == 1 {
        return nums[0]
    }

    dp := make([]int, len(nums), len(nums))
    dp[0] = nums[0]
    dp[1] = max(nums[0], nums[1])

    //dp数组为考察到当前房屋时的最高金额,两种情况,一种是选择当前房屋,因为不能相邻,所以是当前房屋-2的房屋的最高金额+当前房屋金额;另一种则是不选择当前房屋,则取相邻的前一房屋的最高金额;
    for i := 2; i < len(nums); i++ {
        dp[i] = max(dp[i-2]+nums[i], dp[i-1])
    }

    return dp[len(nums)-1]
}

func max(x, y int) int {
    if x > y {
        return x
    }
    return y
}

你可能感兴趣的:(leetcode 第198题-打家劫舍)