leetcode -- House Robber II -- 重点dp
2015-12-10 17:32
302 查看
https://leetcode.com/problems/house-robber-ii/
注意思路:对于第一个house, 判断其“rob” or “not rob”. if rob, 那么结果就是nums[0] + rob_linear(nums[2:i-1]); if not rob, 结果就是 rob_linear(nums[1:i])
参考:
http://bookshadow.com/weblog/2015/05/20/leetcode-house-robber-ii/ 还有更好的方法
my code:
注意思路:对于第一个house, 判断其“rob” or “not rob”. if rob, 那么结果就是nums[0] + rob_linear(nums[2:i-1]); if not rob, 结果就是 rob_linear(nums[1:i])
参考:
http://bookshadow.com/weblog/2015/05/20/leetcode-house-robber-ii/ 还有更好的方法
my code:
class Solution(object): def rob_linear(self, nums): """ :type nums: List[int] :rtype: int """ if len(nums) == 0: return 0 d = [0] * (len(nums) + 1) d[1] = nums[0] for i in xrange(2, len(nums) + 1): d[i] = max(d[i - 2] + nums[i - 1], d[i - 1]) return d[len(nums)] def rob(self, nums): """ :type nums: List[int] :rtype: int """ n = len(nums) if n == 0: return 0 #写下初始情况各个值对应的结果,便于分析理解 #if n == 1: d[1] = nums[0] #if n == 2: d[2] = max(nums) #if n == 3: d[3] = max(nums[0], self.rob_linear(nums[1:])) return max(nums[0] + self.rob_linear(nums[2:n-1]) , self.rob_linear(nums[1:]))
相关文章推荐
- Protocol Buffer技术详解(C++实例)
- java集合框架知识(一)
- ultraedit比较两个文件差异经验
- Mysql中取出某表的字段名
- Html5实现手机九宫格密码解锁功能
- Sed教程(二):基本语法、循环、分支
- 什么是测试开发工程师-google的解释
- memached与radis一点比较
- java 实现的Boyer-Moore(BM)算法
- Android学习摘记——简单的自定义View(组合控件)
- 美啦:从工具到美妆共享经济平台的豹变
- Android APK反编译查看源码及资源文件
- windows下构建Go程序
- IOS中的触摸事件
- CentOS_6.5单用户模式改密遇到Authentication token manipulation error和Read-only file system错误
- GSM模块短信发送举例
- Android学习笔记之Activity的启动模式
- 开发者证书的一些问题
- ubuntu上软件安装
- Objective-c语言_设置器和访问器