我在做抢屋者挑战。
class Solution {
func rob(_ nums: [Int]) -> Int {
var mostMoneyRobbed = 0
func rob(neighborUnits: [Int], startfromUnit unit: Int, didRobAdjacentUnit: Bool, totalMoneyRobbed total: Int){
if total > mostMoneyRobbed{
mostMoneyRobbed = total
}
for i in unit...neighborUnits.count - 1{
if i == neighborUnits.count - 1{
if !didRobAdjacentUnit{
if total + nums[i] > mostMoneyRobbed{
mostMoneyRobbed = total + nums[i]
}
}
return
}
if didRobAdjacentUnit{
rob(neighborUnits: nums, startfromUnit: unit + 1, didRobAdjacentUnit: false, totalMoneyRobbed: total)
}else{
rob(neighborUnits: nums, startfromUnit: unit + 1, didRobAdjacentUnit: true, totalMoneyRobbed: total + nums[i])
rob(neighborUnits: nums, startfromUnit: unit + 1, didRobAdjacentUnit: false, totalMoneyRobbed: total)
}
}
}
guard nums.count > 0 else {
return 0
}
rob(neighborUnits: nums, startfromUnit: 0, didRobAdjacentUnit: true, totalMoneyRobbed: 0)
rob(neighborUnits: nums, startfromUnit: 0, didRobAdjacentUnit: false, totalMoneyRobbed: 0)
return mostMoneyRobbed
}
}
用法:
let s = Solution()
print(s.rob([1,2,3])) // returns 5 instead of 4
我的迭代策略是:
if i == neighborUnits.count - 1{
问题是我通过两种方法迭代。一个“for循环”和单元+1
。我在递归的核心部分搞砸了。不使用'for循环',只使用单元+1
就是所需要的。
class Solution {
func rob(_ nums: [Int]) -> Int {
var mostMoneyRobbed = 0
func rob(neighborUnits: [Int], startfromUnit unit: Int, didRobAdjacentUnit: Bool, totalMoneyRobbed total: Int){
if total > mostMoneyRobbed{
mostMoneyRobbed = total
}
if unit == neighborUnits.count - 1{
if !didRobAdjacentUnit{
if total + nums[unit] > mostMoneyRobbed{
mostMoneyRobbed = total + nums[unit]
}
}
return
}
if didRobAdjacentUnit{
rob(neighborUnits: nums, startfromUnit: unit + 1, didRobAdjacentUnit: false, totalMoneyRobbed: total)
}else{
rob(neighborUnits: nums, startfromUnit: unit + 1, didRobAdjacentUnit: true, totalMoneyRobbed: total + nums[unit])
rob(neighborUnits: nums, startfromUnit: unit + 1, didRobAdjacentUnit: false, totalMoneyRobbed: total)
}
}
guard nums.count > 1 else{
if nums.count == 0{
return 0
}else{
return nums[0]
}
}
rob(neighborUnits: nums, startfromUnit: 0, didRobAdjacentUnit: true, totalMoneyRobbed: 0)
rob(neighborUnits: nums, startfromUnit: 0, didRobAdjacentUnit: false, totalMoneyRobbed: 0)
return mostMoneyRobbed
}
}
到目前为止,这与预期的一样有效。在LeetCode上,我在第49个测试用例上得到了一个超过时间限制的错误!:d
问题内容: 我想定义一个包含和方法的类,可以按如下方式调用该类: 为了不使用隔行扫描类,我的想法是覆盖和方法并检查给定名称是否将return重定向到。但是我遇到了无限递归的问题。示例代码如下: 正如在代码中尝试创建新属性一样,它调用,再次调用,依此类推。我怎么需要更改此代码,即,在这种情况下,一个新的属性的创建,持有的价值? 还是有更好的方法来处理“映射”到的呼叫? 总是有关于为什么的问题:我需要
本文向大家介绍Java递归如何正确输出树形菜单,包括了Java递归如何正确输出树形菜单的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java递归输出树形菜单的具体代码,供大家参考,具体内容如下 首先我们要建立树节点的类: 输出树形菜单类: 然后我们来测试一下: 输出的结果: 浏览器效果: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
2-我在FlatList中实现分页,所以当用户到达数据列表的末尾时,我调用一个函数来增加当前页,并根据当前页更新的情况,再次提取,因为我将to useEffect传递给依赖项数组 所以这里的问题是应该将以前的数据与新数据联系起来,所以我使用方法, 它工作得很好,但有时我收到一个警告,告诉我有一个重复的数据,当我使用扩展时不工作,我得到一个很大的错误,因为Flatlist keyExtractor问
问题内容: 我正在努力在程序中实现一个对话框。主程序不使用阶段。但是,当用户的生存时间为0时,我想弹出一个对话框,以重新启动游戏或退出游戏。 我使用以下代码为对话框创建了一个单独的类。 游戏主屏幕不使用舞台。在更新方法中,如果肝脏为0,则创建GameOver类 在render方法中,我绘制了舞台 第一次创建对话框时,这可以完美地工作。当点击重新启动时,游戏将重新启动(或实际上重置比分并生效)。但是
我试图熟悉JavaScript中的函数式编程。我刚读到指针函子是: 具有of函数的对象,可将任何单个值放入其中。 ES2015添加了一个rray.of使数组成为一个指向的仿函数。 我的问题是“单一价值”到底是什么意思? 我想做一个函数/容器(像https://drboolean.gitbooks.io/mostly-adequate-guide/content/ch8.html),它持有给定维度(
问题内容: 我面临一种奇怪的情况,即我编写的批处理文件报告了错误的退出状态。这是重现该问题的最小示例: 如果我运行此脚本(使用Python,但是当以其他方式启动时实际上也会出现问题),这是我得到的: 注意如何报告,即使应该如此。 现在很奇怪的是,如果我删除了inner子句(这没关系,因为之后的所有内容都不应该执行),然后尝试启动它: 我再次启动它: 现在正确地报告为。 我不知道是什么原因造成的