通往楼梯顶部的可能路径

2024-05-17

这是一个非常经典的问题,我听说谷歌在他们的面试中使用过这个问题。

问题:制定一个递归方法,打印从楼梯底部到楼梯顶部的所有可能的独特路径(有 n 个楼梯)。您一次只能走 1 步或 2 步。

示例输出:如果它是一个有 3 级楼梯的楼梯...

1 1 1

2 1

1 2

如果是4级楼梯的话...

1 1 1 1

1 1 2

1 2 1

2 1 1

2 2

*输出的顺序并不重要

我在这里看到过类似的问题,但所有问题都要求提供路径总数。这种递归方法需要打印出所有可能的路径。 这里唯一的限制是您必须在方法中的某个地方使用递归。如果需要,您可以使用 1 种以上的方法。


好吧,如果你还剩下 0 级楼梯,那么你就已经到达终点了;如果您还有 1 个楼梯,则下一步的移动尺寸只能为 1;如果前面有更多楼梯,下一步可能是 1 或 2 级楼梯,因此递归变得非常简单:

void makeSteps(List<Integer> prevSteps, int s) {
    if (s == 0) {                        // no more stairs left
        System.out.println(prevSteps);
    } else {                             // 1 or more stairs left
        List<Integer> n1 = new ArrayList<>(prevSteps);
        n1.add(1);
        makeSteps(n1, s - 1);
        if (s > 1) {                     // 2 or more stairs left
            List<Integer> n2 = new ArrayList<>(prevSteps);
            n2.add(2); 
            makeSteps(n2, s - 2);
        }           
    }
}

prevSteps代表之前的路径,s存储剩余楼梯数。要打印 n 级楼梯的所有可能方式,请调用:

makeSteps(new ArrayList<>(), n);

这段代码可以很容易地重构为更通用的形式,其中可能的步长不仅可以是 1 或 2,还可以是任意数字,最多可达maxStep:

void makeSteps(List<Integer> prevSteps, int s, int maxStep) {
    if (s == 0) {                        // no more stairs left
        System.out.println(prevSteps);
    } else {                             // 1 or more stairs left
        for (int step = 1; step <= Math.min(maxStep, s); step++) {
            List<Integer> newSteps = new ArrayList<>(prevSteps);
            newSteps.add(step);
            makeSteps(newSteps, s - step, maxStep);
        }           
    }
}

要获得相同的结果,请使用第三个参数调用它:

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

通往楼梯顶部的可能路径 的相关文章

随机推荐

  • ASP.Net 应用程序中的音频/视频/文本聊天

    我需要在 ASP Net 中开发一个聊天系统 我已经浏览了很多关于类似主题的问题 但没有找到任何一个令人满意的 是否可以从头开始创建它 或者我是否需要使用一些 API 我的要求仅限于我的网站用户 可以说基于内联网 请帮我 要进行文字聊天 人
  • 使用 Boost 序列化并发送数据结构?

    我有一个如下所示的数据结构 typedef struct unsigned short m short1 unsigned short m short2 unsigned char m character MyDataType 我想使用 b
  • AutoMapper 将 IdPost 映射到 Post

    我正在尝试根据规则将 DTO 上的 int IdPost 映射到 Blog 对象上的 Post 对象 我想实现这一点 BlogDTO IdPost gt Blog Post 帖子将由 NHibernate 加载 Session Load I
  • Django 模板标签内字符串连接最佳实践

    我正在尝试连接一些字符串以格式化模板标记内的 URL 但我找不到一种优雅的方法 到目前为止 我所拥有的是 button Activate http site domain url registration activate activati
  • Qt 5.6 测试版 Visual Studio 2015

    我已经安装了这个 http download qt io development releases qt 5 6 5 6 0 beta qt opensource windows x86 msvc2015 5 6 0 beta exe mi
  • “一旦获取切片就无法更新查询”。最佳实践?

    由于我的项目的性质 我发现自己不断地从查询集中取出切片 如下所示 Thread objects filter board requested board id order by updatedate 10 但这给我带来了实际对我选择的元素进
  • 工厂模式但带有对象参数

    采用以下经典工厂模式 public interface IPizza decimal Price get public class HamAndMushroomPizza IPizza decimal IPizza Price get re
  • JAPE中Space Token的概念

    我正在尝试 JAPE 片段并尝试理解 Space Token 的概念 Phase Apple Input Token SpaceToken Lookup Options control appelt Rule Country Token s
  • LINQ options.loadwith 问题

    我正在编写一个基于标签的 ASP net 系统 使用以下数据库方案 Topic
  • 如何从android获取应用程序安装时间

    我尝试了一些方法 但没有成功 请帮助我 PackageManager pm context getPackageManager ApplicationInfo appInfo pm getApplicationInfo app packag
  • Django通用外键和select_相关

    我试图使用与通用外键的关系来选择模型 但它没有按预期工作 我认为用代码可以更好地说明和理解 class ModelA models Model created models DateTimeField auto now add True c
  • 为什么这个实现方法看不到它的同级方法? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个实现接口的类 public class SQLiteHHSDBUtils IHHSDBUtils void IHHSDBUtils
  • PyTorch 给出 cuda 运行时错误

    我对我的代码做了一些小小的修改 以便它不使用 DataParallel and DistributedDataParallel 代码如下 import argparse import os import shutil import time
  • 身份验证在 Spring Boot 1.5.2 和 Oauth2 中不起作用

    我正在使用带有 spring boot 1 5 2 RELEASE 的 Oauth2 当我尝试重写 ResourceServerConfigurerAdapter 类的配置方法时 它给了我一个编译错误 但这在 Spring boot 1 2
  • $compile 不编译 Karma/Jasmine 中的模板

    我已经用 PhantomJS 和 Chrome 对此进行了测试 下列的这个问题 https stackoverflow com questions 27026596 accessing compiled template in unit t
  • 在鼠标光标位置添加 cytoscape 节点

    我想在画布上的单击事件上的鼠标箭头位置添加一个 cytoscape 节点 我怎样才能做到这一点 我的方法 效果不太好 我可以通过单击创建一个节点 但无法确保创建的节点的位置位于我单击的位置 使用这样的东西 cy click function
  • PHP - hash_pbkdf2 函数

    我正在尝试使用此 php 函数执行一个函数来哈希密码 http be php net manual en function hash pbkdf2 php http be php net manual en function hash pb
  • 如何导入和导出 javascript ES6 类

    我是 javascript 和 nodejs 的新手 我正在使用这个项目来发展我的技能并学习新技术 目前我的项目使用多个相互依赖的类 类文件位于不同的目录中 我当前正在尝试使用 export 和 require 语句来允许在其他文件中引用类
  • 当尝试将 formData 发送到 Express js 时,服务器无法识别 multipart/form-data

    我正在尝试将表单数据上传到快递服务器 在我的 Express js 服务器上 我有以下内容 router post uploads id function req res res send req body const title req
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2