单次跳跃最多回溯 n 个楼梯,最多 k 步

2023-12-05

您需要爬一个有 n 个台阶的楼梯,并且您决定通过跳上台阶来获得一些额外的锻炼。单次跳跃最多可以完成 k 步。返回爬楼梯时所有可能的跳跃顺序,并排序。

我的实施显然给了我错误的答案。

def climbingStaircase(n, k):
    final_res=[]
    final_res.append(CSR(n,k,[]))
    return final_res

def CSR(n,k,res):
    if n == 0:
        return res        
    else:
        for i in range(1,k+1):
            if n-i>=0:
                res.append(i)
                n=n-i
                res=CSR(n,i,res)
        return res

对于 n = 4 且 k = 2,输出应为

[[1, 1, 1, 1],
 [1, 1, 2],
 [1, 2, 1],
 [2, 1, 1],
 [2, 2]]

实际输出:

[[1,1,1,1,2,1]]

有人能指出我缺少哪一部分吗?


下面的代码中存在一个巨大的问题:您扣除了以下步骤的数量:each步长范围内的可能性。

n=n-i
res=CSR(n,i,res)

当您探索完一步跳跃可以做什么后,您需要回溯并尝试从same起点(该实例的原始值n) 进行 2 步跳跃。将代码更改为:

res = CSR(n-i, i, res)

这保持了n当你经历循环时,值保持不变。

此外,您不能将未来的跳跃限制为您刚刚获得的最大值。也更改第二个参数:

res = CSR(n-i, k, res)

这应该会让你动起来。也试试这个可爱的debug博客寻求帮助。至少插入一两个跟踪语句,例如

print n, k, res

在你的日常工作的顶部。

CAVEAT

这还不是你的全部麻烦。剩下的最大问题是CSR仅返回一个解决方案:您采取的每一步都会附加到same列表。您需要一种方法将已完成的解决方案收集为单独的列表;这append in climbingStaircase仅执行一次,之后CSR已经完全完成了。

您需要在以下位置认可完整的解决方案n==0.

调试帮助

这是程序的一个版本,固定了递归参数,并插入了调试跟踪。

indent = ""

def climbingStaircase(n, k):
    final_res = []
    final_res.append(CSR(n, k, []))
    return final_res

def CSR(n, k, res):
    global indent
    indent += "  "
    print indent, n, k, res
    if n == 0:
        print "SOLUTION", res
    else:
        for i in range(1, k+1):
            if n-i >= 0:
                CSR(n-i, k, res + [i])
    indent = indent[:-2]

print climbingStaircase(4, 2)

请注意使用“缩进”来帮助可视化您的递归和回溯。这里的关键部分是,而不是更新res在全局范围内,我将其保留为局部变量。我也曾removed现在的返回值,只需转储即可输出找到的解决方案。您可以看到它是如何工作的:

   4 2 []
     3 2 [1]
       2 2 [1, 1]
         1 2 [1, 1, 1]
           0 2 [1, 1, 1, 1]
SOLUTION [1, 1, 1, 1]
         0 2 [1, 1, 2]
SOLUTION [1, 1, 2]
       1 2 [1, 2]
         0 2 [1, 2, 1]
SOLUTION [1, 2, 1]
     2 2 [2]
       1 2 [2, 1]
         0 2 [2, 1, 1]
SOLUTION [2, 1, 1]
       0 2 [2, 2]
SOLUTION [2, 2]
[None]

有了这些东西,我希望您能够跟踪您的逻辑并找出如何在您选择的级别捕获解决方案的顺序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单次跳跃最多回溯 n 个楼梯,最多 k 步 的相关文章

  • typescript 类型最大递归限制为 9

    我终于成功创建了一个通用类型 它为我提供了 json 键列表 值的所有可能组合 我什至准备了一种限制递归的方法 type EditAction
  • 递归:n项级数之和

    需要递归函数 系列是 1 2 3 3 4 5 4 5 6 7 递归求 n 的级数之和 我无法想到应该在函数中传递哪些参数 我的方法 我认为我应该传递 n 要相乘的项数 但我无法想到的是我应该如何在同一个函数中 和 以及我的 return 语
  • 如何在大空间尺度上加速A*算法?

    From http ccl northwestern edu netlogo models community Astardemo http ccl northwestern edu netlogo models community Ast
  • CSR 矩阵 - 矩阵乘法

    我有两个方阵A and B 我必须转换B to CSR Format并确定产品C A B csr C 我在网上找到了很多关于CSR 矩阵 向量乘法 http www mathcs emory edu cheung Courses 561 S
  • python解释器自动重启而不返回答案

    调用递归函数时 python解释器会自动重新启动吗 我正在编写一个快速排序算法 并尝试对一个大的数字数组 顺序 10 4 进行排序 但是当我尝试对整个数组进行排序时 python 正在重新启动 即给我 重新启动 并且存储在内存中的所有值 函
  • 如何以最小化每个分区总和的最大值的方式对整数数组进行分区?

    输入是正整数或空整数的数组 A 和另一个整数 K 我们应该将 A 划分为 K 个连续元素块 我所说的 划分 是指 A 的每个元素都属于某个块 并且 2 个不同的块不包含任何共同元素 我们将块的总和定义为该块的元素的总和 目标是在 K 个块中
  • Haar级联正例图像大小调整

    我正在迈出第一步 为自定义对象识别创建 haar 级联 我花了时间获取大量数据并编写了一些预处理脚本以将视频转换为帧 我的下一步是裁剪感兴趣的对象 以创建一些积极的训练示例 我有几个问题 我确实在网上寻找答案 我有点困惑 我读到我应该致力于
  • 找到一个恰好出现了 N/2 次的数字

    这是我的面试问题之一 给定一个包含 N 个元素的数组以及元素出现的位置正好 N 2次 其余 N 2 个元素是unique 您如何找到运行时间更好的元素 请记住 元素未排序 您可以假设 N 是偶数 例如 input array 10 2 3
  • 在 O(n) 时间内对列表中的数字方块进行排序?

    给定一个按排序顺序排列的整数列表 例如 9 2 0 2 3 我们必须对每个元素进行平方并按排序顺序返回结果 所以 输出将是 0 4 4 9 81 我可以找出两种方法 O NlogN 方法 我们将每个元素的平方插入哈希集中 然后将元素复制到列
  • std::__gcd 和 std::gcd 有什么区别?

    Many https www geeksforgeeks org stdgcd c inbuilt function finding gcd websites https codeforces com submissions Madiyar
  • 哪种算法可以有效地找到路径一定距离内的一组点?

    给定一组点s 一组 x y 坐标 和由连接一组点的线段组成的路径l 描述一种有效的算法 可用于从s在指定距离内d路径的l 其实际应用可能是查找沿城市之间的公路旅行路径 10 英里内任意位置的餐馆列表 For example in the f
  • 如何发现“贪婪”算法?

    我正在读一本关于 贪婪 算法 但我很难发现它们解决真正的 顶级程序员 问题 If I know给定的问题可以用 贪婪 算法来解决 因此编写解决方案非常容易 然而 如果我没有被告知这个问题是 贪婪的 我就无法发现它 用 贪婪 算法解决的问题有
  • 为什么对本地列表求和比用“GHC -O2”对教会编码列表求和慢?

    为了测试教会编码的列表如何针对用户定义的列表和本机列表执行 我准备了 3 个基准测试 用户定义的列表 data List a Cons a List a Nil deriving Show lenumTil n go n Nil where
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 为什么这个递归函数返回未定义?

    我正在尝试编写一个使用递归组合两个字符串的函数 我的代码如下 但我不知道为什么该函数返回未定义 特别是当我在基本情况下使用 console log 时 它不会打印未定义而是打印正确的值 var str3 function merge str
  • 缓存感知树的实现

    I have a tree where every node may have 0 to N children 用例是以下查询 给定指向两个节点的指针 这些节点是否位于树的同一分支内 Examples q 2 7 gt true q 5 4
  • 快速查找具有最大总不同元素的列表列表的子集

    给定元组列表的列表 我想找到列表的子集 该子集最大化不同整数值的数量 而不重复任何整数 该列表看起来像这样 x 1 2 3 8 9 10 15 16 2 3 10 11 9 10 11 17 18 19 20 21 22 4 5 11 12
  • 通过保留和复制来复制向量,还是通过创建和交换来复制向量更有效? [复制]

    这个问题在这里已经有答案了 我正在尝试有效地复制向量 我看到两种可能的方法 std vector
  • 增量决策树 C++ 实现

    有谁知道决策树分类器的增量实现吗 这样 当您将新实例添加到训练集中时 它可以根据现有决策树分类器以低计算量并尽可能快地生成最佳决策树分类器 换句话说 我有一个最优决策树分类器集A 其中命名为T 1 现在我想添加实例X to set A并找到
  • 证明字符串算法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 正确的 PHP mcrypt 加密方法?

    好的 我尝试使用 PHP 创建自己的加密 解密方法mcrypt 当我不久前发布它们时 有些人称它们为 垃圾 他们提到了 初始化向量 之类的事情 基本上 我怎样才能使这些加密方法更好 function encrypt key data enc
  • Python hashlib Checksum 与 linux md5sum 不同

    我正在尝试使用 python 的 hashlib 模块计算字符串 test 的校验和 我用的是python3 In 31 hobj hashlib new md5 In 32 hobj update test encode UTF 8 In
  • BigQuery 文档在哪里描述了如何在 SQL 中内联定义 Javascript UDF 函数(而不是在 UDF 编辑器或单独的文件中)?

    在另一个问题中https stackoverflow com a 36145155 2259571发布的代码示例定义了内联 Javascript UDF 函数 不是在 BigQuery UI UDF 编辑器中 也不是在 bq 命令行 udf
  • zlib TypeError:需要类似字节的对象,而不是“str”

    我使用这段代码来编码和压缩文本 但它不能正常工作 Traceback most recent call last File E SOUND py line 114 in
  • 实体框架和 SCOPE_IDENTITY

    我有一个存储过程 它插入到表中然后执行这一行 SET returnVal SCOPE IDENTITY 之后我都尝试过 SELECT returnVal and return returnVal 当我从 Microsoft SQL Serv
  • Firebase 动态链接无法在安装后继续存在

    我已经完成了 Firebase 教程 我已经实现了 Firebase SDK 动态链接 管理我的应用程序以支持关联域 并且一切正常 除了动态链接在安装后无法继续存在 我通过 Firebase 控制台创建了一个动态链接 当应用程序已经安装时
  • Irvine 的 WriteString 的奇怪输出

    以下程序的重点是打印出字母 c 以及每种背景和前景色的组合 在库中 我使用的颜色定义为 0 15 并使用以下代码 mov eax FOREGROUND BACKGROUND 16 call SetTextColor 这是我的代码 INCLU
  • 如何在 R 中将一元数据转换为二元数据(国家年份转换为配对年份)?

    我有按国家 地区年份组织的数据 以及二元关系的 ID 我想按二年组织这个 我的数据的组织方式如下 dyadic id country codes year 1 1 200 1990 2 1 20 1990 3 1 200 1991 4 1
  • 网站如何检测机器人?

    我正在学习 python 目前正在抓取 reddit 不知何故 reddit 发现我是一个机器人 我的软件实际上是一个机器人 但他们怎么知道这一点 以及我们如何欺骗他们认为我们是普通用户 我找到了实用的解决方案 但我要求更深入的理论理解 互
  • YAML 合并级别

    我们有一个包含重复部分的 gitlab ci yaml 文件 test client before script node v yarn install cache untracked true key client paths node
  • 如何将引用(不可序列化)从一个活动传递到另一个活动?

    假设我有一个对象的引用 我应该如何将其从一个活动传递到另一个活动 我不想查询应用程序对象 单例 静态变量 这还有可能吗 您可以在另一个活动中声明一个静态变量 或者在应用程序类中声明一些全局变量 然后在任何活动中访问它 就像您想从OldAct
  • Spring 会话范围的 bean(控制器)和对服务的引用(在序列化方面)

    标准情况 你有一个控制器 Controller with Scope session 通常期望在会话中放置的类能够实现Serializable以便在服务器重新启动时可以物理存储它们 例如 如果控制器实现Serializable 这意味着它引
  • .NET 中的“计算机不是我的成员”错误

    这个错误非常烦人 我已经进行了各种搜索 并且已经能够解决这个问题 我是该应用程序的几位开发人员之一 也是唯一遇到此问题的开发人员 我之前已经通过将扩展添加到项目属性中的 我的扩展 面板 这会生成不同的错误 然后删除该新扩展来临时修复了该问题
  • 从日历中获取日期之前的 18 年

    我需要获得 18 年后的完整日期 dd mm yyyy 我用代码作为 日历计算 Calendar getInstance calc add 日历 YEAR 18 它检索年而不是月或日之前的 18 年 即使在任何月份的 1 号等极端情况下 我
  • 如何在列表视图的行之间留出空白?

    在我的应用程序中 我需要列表视图在列表行之间有空格 这样我就可以为每一行提供背景 并且它看起来像行块 我尽了最大努力但没有找到任何解决方案 您可以使用android divider and android dividerHeight自定义行
  • 使用仅包含 ISO 周的数据集将 ISO 周聚合为几个月

    我的数据位于数据框中 其结构如下 df2 lt data frame Year c 2007 Week c 1 12 Measurement c rnorm 12 mean 4 sd 1 不幸的是 我没有每次测量的完整日期 例如缺少天数 只
  • 如何防止 GWT 应用程序中的 DoubleSubmit?

    澄清一下什么是双重提交 当用户点击提交按钮两次时 服务器将处理相同的 POST 数据两次 为了避免这种情况 除了在单次提交后禁用按钮之外 大多数 Web 框架 如 Struts 都提供了令牌机制 我正在 GWT 中寻找与此等效的内容 如果您
  • 如何获取上传文件的最后修改日期?

    我上传一个 XML 文件以将其内容迁移到我的数据库 但我想首先存储该文件的最后修改日期 以确保该文件与上一个文件相比没有发生任何更改 如何获取文件的最后修改日期 有没有 javascript 函数可以做到这一点 当您使用文件输入上传文件时
  • ASP.NET MVC Excel导出文件格式错误

    我目前正在编写一个 ASP NET MVC 5 控制器操作 以将一些数据导出到 Excel 文件 使用我在此处找到的一些代码 它有效 主要是 它输出一个 Excel 文件 我可以打开该文件 但在显示以下错误消息之前无法打开 Export x
  • 单次跳跃最多回溯 n 个楼梯,最多 k 步

    您需要爬一个有 n 个台阶的楼梯 并且您决定通过跳上台阶来获得一些额外的锻炼 单次跳跃最多可以完成 k 步 返回爬楼梯时所有可能的跳跃顺序 并排序 我的实施显然给了我错误的答案 def climbingStaircase n k final