leetcode-213. 打家劫舍 II

题目

213. 打家劫舍 II

解法

因为是首尾相连的
用原来的 198 题的方法有可能会多算一个
经过一番尝试之后,最终使用了两次遍历的方法

第一次,从0开始,不计算最后一个
第二次,从1开始,计算上最后一个

当然,ret 数组可以简化成两个变量,这里就不继续处理了

class Solution {
/**
* @param Integer[] $nums
* @return Integer
*/
function rob($nums) {
$len = count($nums);
if ($len == 1) {
return $nums[0];
} elseif ($len == 2) {
return max($nums[0], $nums[1]);
}
// 从0开始打
$ret = [
$nums[0],
$nums[0],
];
for ($i = 2; $i < $len - 1; $i++) {
$ret[$i] = max($ret[$i - 1], $ret[$i - 2] + $nums[$i]);
}
$max0 = $ret[$len - 2];
// 从1开始打
$ret = [
$nums[1],
$nums[1],
max($nums[1], $nums[2]),
];
for ($i = 3; $i < $len; $i++) {
$ret[$i] = max($ret[$i - 1], $ret[$i - 2] + $nums[$i]);
}
$max1 = $ret[$len - 1];
return max($max1, $max0);
}
}

参考

可以参考一下官方题解,写的更加清晰一些,将打家劫舍的核心逻辑抽象出了一个函数:
打家劫舍 II-官方题解

posted @   吴丹阳-V  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示