题目
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 := 0prev := 0for _, key := range nums {temp := currcurr = 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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。