213.Hiccup II
topic:
Thought:
这一次终于懂一点Dynamic planning了,The first is the youngest problem,I first thought it was to consider where to start,Start from the first or the second one(这刚好是和Hiccup1Difference)。
但实际上最小子问题还是和Hiccup1Same:Whether to rob the current house。
First we set onedpArray,dp[i]Indicate robbery to the firstiThe maximum return when a house。
Then we rob the current house after we rob the current house dp[i] = dp[i-2] + nums[i],(Because the house can not be robbed before the current house is robbed),Do not rob the current house dp[i] = dp[i-1]。
So we can get the state transfer equation:dp[i] = max(dp[i-2] + nums[i], dp[i-1])。
Last classification discussion and robbery, the first or the second start。
Code:
class Solution:
def rob(self, nums: List[int]) -> int:
def rob1(nums: List[int]) -> int:
if len(nums) == 1:
return nums[0]
ans = 0
dp = [0] * len(nums)
# def: dp[i]Express the robberyiHome
# theft FirstiHouse,The income isdp[i-2]+nums[i], 不theftFirstiHouse,The income isdp[i-1]
for i in range(len(nums)):
dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])
ans = max(ans, dp[i])
return ans
# 打劫First一家,或者First二家开始
return max(rob1(nums[:-1]), rob1(nums[1:])) if len(nums) != 1 else nums[0]贡献者
最近更新
Involution Hell© 2026 byCommunityunderCC BY-NC-SA 4.0
1545. 找出第 N 个二进制字符串中的第 K 位
LeetCode 1545. 找出第 N 个二进制字符串中的第 K 位 题解 — 递归与数学翻转解法,通过分析字符串构造规律(S₁=0,后续由前序+1+反转取反前序组成),将第 K 位分为左半、中间、右半三类递归求解,避免暴力生成导致内存溢出。适合准备面试、刷递归与位运算题型的算法学习者。
2490Return ring sentence
LeetCode 2490. 回环句 题解 — 判断句子是否为回环句,核心解法为分割单词后检查每个单词末字母与下一单词首字母是否相同,涉及字符串分割与双指针遍历技巧。适合正在刷 LeetCode 字符串类题目的求职者与算法学习者。