213. 打家劫舍 II golang 动态规划

题目

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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发布了356 篇原创文章 · 获赞 247 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/csdn_kou/article/details/104706190