题目
213. 打家劫舍 II
198. 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。
解法
主要是理解不让首尾相连是什么意思!
第一个元素到倒数第二个元素的最大值 m
第二个元素到倒数第一元素的最大值 n
代码
func rob(nums []int) int {
if len(nums) == 0 {
return 0
}
if len(nums) == 1 {
return nums[0]
}
m := rob_one_nine_eight(nums[1:len(nums)])
n := rob_one_nine_eight(nums[0:len(nums)-1])
fmt.Println(m,n)
if m > n {
return m
}
return n
//fmt.Println(nums[1:len(nums)])
//fmt.Println(nums[0:len(nums)-1])
}
func rob_one_nine_eight(nums []int) int {
curr := 0
prev := 0
for _, key := range nums {
temp := curr
curr = max(prev+key, curr)
prev = temp
}
return curr
}
func max(n, m int) int {
if n > m {
return n
} else {
return m
}
}
作者:HodgeKou
链接:https://leetcode-cn.com/problems/house-robber-ii/solution/go-213-by-hodgekou/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。