带有递归的字符串排列

2023-12-25

我是一名java初学者,正在尝试从java编程书中进行字符串排列练习。我定义了两种方法:

public static void displayPermutation(String s)
public static void displayPermutation(String s1, String s2)

第一个方法只是调用displayPermutation(" ", s)。第二种方法使用循环将字符从 s2 移动到 s1,并使用新的 s1 和 s2 递归调用它。基本情况是 s2 为空并将 s1 打印到控制台。

谁能帮我找出以下代码的问题是什么?

她的例子:

 public static void displayPermutation(String s) {
            displayPermuatation("", s);
        }

    private static void displayPermuatation(String s1, String s2) {
        //base case: when s2 is empty, print s1
        if (s2.isEmpty()) {
            System.out.println(s1);
        }
        else {          
        for (int i = 0; i < s2.length(); i++) {
                        //move a char from s1 to s2, and recursively invokes it with 
                        //new s1 and s2
            s1 = s1 + s2.charAt(i);
            s2 = s2.substring(0, i) + s2.substring(i+1);
            displayPermuatation(s1, s2);
        }
    }
   }

如果 s =“abc”, 它只打印: ABC 阿克布

似乎在第一次调用 display Permutation("", "abc") 时,它没有完成 for 循环...... 任何意见?

感谢下面所有的评论。我认为我犯的错误是因为将对象作为参数传递给方法实际上是在传递引用。它不像原始数据(按值传递)。当更改对象时,将会影响使用该对象的后续方法调用。


请勿更改s1 and s2在循环中,这会导致错误。只需将这些定义作为参数传递给递归函数即可。像这样:

.
.
for (int i = 0; i < s2.length(); i++) {
        displayPermuatation(s1 + s2.charAt(i), s2.substring(0, i) + s2.substring(i+1));
    }
.
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有递归的字符串排列 的相关文章

  • JavaFX 2.0 FXML 子窗口

    经过多次搜索我发现了这个问题如何创建 javafx 2 0 应用程序 MDI https stackoverflow com questions 10915388 how to create a javafx 2 0 application
  • 如何将现有的 SQLite3 数据库导入 Room?

    好吧 我在桌面上使用 SQLite3 创建了一个只需要读取的某些信息的数据库 我正在制作的应用程序不需要在此表中插入或删除信息 我在 Room 数据库层上做了相当多的谷歌搜索 所有文档都需要在构建应用程序时在 Room 中创建一个新的数据库
  • 如何为小程序提供对文件系统写入的访问权限

    我在设置小程序的策略文件时遇到问题 我是第一次这样做 不知道如何在java中设置小程序的策略文件 实际上我想授予小程序在文件系统上写入的权限 为此我必须向小程序授予文件权限 所以我创建了一个名为 java policy 的文件 并将以下代码
  • 具有 CRUD 功能的基于 Spring Web 的管理工具

    在 PHP Symfony 世界里有一个工具叫 Sonata Adminhttps sonata project org https sonata project org 基于 AdminLTE 模板 这是一款一体化管理工具 具有登录 菜单
  • 在 Golang 中生成固定长度的随机十六进制字符串的有效方法?

    我需要生成很多固定长度的随机十六进制字符串 我找到这个解决方案golang中如何生成固定长度的随机字符串 https stackoverflow com a 31832326 710955 我正在做这样的事情 const letterByt
  • 使用 JSch 分别为各个提示提供输入

    问题是 SSH 连接需要在常规登录后提供另一个用户 ID 和密码信息 我正在使用 JSch 连接到远程服务器 它接受以下形式的输入InputStream 和这个InputStream只能通过一次 由于会话是交互式的 这会导致问题 我尝试将输
  • java中的单链表和双向链表?

    在java中 哪个集合接口可以有效地实现单链表和双向链表 请问代码示例吗 毫不奇怪 实现双向链表的正确接口是 LinkedList 看Java文档 http docs oracle com javase 8 docs api java ut
  • OpenNLP 与斯坦福 CoreNLP

    我一直在对这两个包进行一些比较 但不确定该往哪个方向走 我简单地寻找的是 命名实体识别 人 地点 组织等 性别识别 一个不错的训练 API 据我所知 OpenNLP 和斯坦福 CoreNLP 提供了非常相似的功能 然而 Stanford C
  • 在 Junit 测试中使用 ReflectionTestUtils.setField()

    我是 JUnittesting 的新手 所以我有一个问题 谁能告诉我为什么我们使用ReflectionTestUtils setField 在我们的 Junit 测试示例中 正如评论中提到的 java 文档很好地解释了用法 但我还想给你们举
  • Android volley使用RequestFuture.get()时出现超时异常

    在我的片段中 我尝试使用 TMDB 的开放电影数据库来获取有关 正在播放 电影的详细信息 如果我使用 RequestFuture get time TimeUnit 方法来执行此齐射请求 我总是会收到超时错误 如果我在 Safari 中手动
  • Java - JPanel 内有边距和 JTextArea

    我想创建这样的东西 主面板有其边距 x 并且 TextArea 位于该面板的中心 几乎填满了面板 底部是另一个具有自定义尺寸 高度 y 的面板 可以使用某些快捷方式将其切换为可见和不可见 底部面板有 FlowLayout 和几个元素 问题是
  • 如何在 Bean Validation 1.0 中构造 ConstraintViolationException?

    我对 javax validation API 感到困惑 我正在编写一个简单的测试来理解它 Sample sample new Sample Set
  • 多线程——更快的方法?

    我有一堂有吸气剂的课程getInt 和一个二传手setInt 在某个领域 比如说领域 Integer Int 一个类的一个对象 比如说SomeClass The setInt 这里是同步的 getInt isn t 我正在更新的值Int来自
  • 改变 Java 中凯撒移位的方向

    用户可以通过选择 1 向左或 2 向右移动字母来选择向左或向右移动 左边工作正常 右边不行 现在它显示了完全相同的循环 但我已经改变了所有 and 以不同的方式进行标记 最终我总是得到奇怪的字符 如何让程序将字符向相反方向移动 如果用户输入
  • Jetty Plugin 9启动不喜欢icu4j-2.6.1.jar

    我对 mortbay 的 Maven jetty 插件 6 有相同的配置
  • 如何检查日期字符串的有效性?

    在我的项目中 我需要检查日期字符串是否计算为正确的日期对象 我决定允许 yyyy MM dd 和日期格式 年 月 日 和 年 月 日 小时 分钟 我如何检查它们是否有效 我的代码为 1980 01 01 和一些奇怪的日期 如 3837 05
  • android 中的 java.net.URL ..新手问题

    我是java新手 正在尝试android开发 以下代码生成 malformedURLException 有人可以帮助我识别异常吗 任何提示都会非常有帮助 package com example helloandroid import and
  • 传递 Android DialogFragment 参数时,onCreateDialog 捆绑参数意外为 null

    我正在尝试使用 DialogFragment 在 Android 中显示一个基本对话框 并使用对话框消息的参数 如中所述StackOverflow线程 https stackoverflow com questions 15459209 p
  • CXF:通过 SOAP 发送对象时如何排除某些属性?

    我使用 Apache CXF 2 4 2 当我将数据库中的某个对象返回给用户时 我想排除一些属性 例如密码 我怎样才能做到这一点无需创建临时的班级 有这方面的注释吗 根据 tomasz nurkiewicz 评论我应该使用 XmlTrans
  • java中的预增量/后增量

    有人可以帮助我理解为什么 int i 1 int j 1 int k 1 int l 1 System out println i i System out println j j System out println k k System

随机推荐

  • 需要解释此代码如何处理 Arraylist 值

    public static void mystery1 ArrayList
  • Angular 的 ngTouch 库可以用来检测长按(触摸/按住/释放到位)事件吗?

    我的 AngularJS 应用程序需要能够检测触摸事件的开始和停止 无需滑动 例如 我需要在触摸开始时执行一些逻辑 用户按下手指并按住 然后在同一触摸结束时执行不同的逻辑 用户移开手指 我正在考虑为该任务实现 ngTouch 但 ngTou
  • 从Java开始忽略/捕获子进程输出的最简单方法

    java中的子进程非常昂贵 每个进程通常由多个线程支持 托管进程的线程 Linux 上的 JDK 1 6 一个读取 打印 忽略输入流的线程 另一个线程读取 打印 忽略错误流 更多线程来执行超时和监视并由应用程序终止子进程 业务逻辑线程 ho
  • 与 pytest 一起使用时禁用日志记录

    我在同时使用 pytest 和日志记录时遇到问题 当我单独运行一个程序时 我可以看到它的消息打印在屏幕上以及文件 test log 中 python3 main py gt prints on terminal and also in te
  • 确定绝对id

    如何确定organizationUnit的绝对id 来自 webapp resources acme organizationUnit xhtml 当我从树中选择一个节点时 organizationUnit 应显示所选节点 我无法使用相对
  • AVFoundation 使用 Alpha 通道解码 prores4444 电影

    我正在尝试使用 Swift 在 iOS 上使用 alpha 通道解码 prores4444 视频 将其作为复杂的动画叠加在用户视频上并将其导出到他的库中 AVFoundation 文档不是那么好 我正在努力寻找任何代码示例 当我尝试将下面的
  • PHP中如何检查一个方法是否是静态的?

    我需要知道该方法是否在给定其名称和包含该方法的类的名称的情况下声明为静态 method exists提供true对于静态和非静态方法 下面是关于如何使用 ReflectionMethod 的更清晰的方法 MethodChecker new
  • Python 中的字符串反转

    我接受了一个整数输入并尝试在 Python 中反转它 但徒劳 我把它改成了字符串 但仍然不能 有什么办法可以逆转吗 有没有内置的功能 我无法将整数转换为列表 因此无法应用反向函数 您可以使用切片运算符来反转字符串 s hello world
  • nginx proxy_pass 通过 https_proxy

    我正在尝试使用此配置设置 nginx 要访问 backend mygreat server com 我必须通过我的公司代理 即 myproxy server com 80 因此 我将其添加到 etc environment 中 https
  • 如何获取最新的 Chrome(版本 55)以允许混合内容?

    我有一个 chrome 扩展 它在开发中使用 HTTP 进行通信 在生产中使用 HTTPS 进行通信 我从使用 HTTPS 的网页运行它 当我在开发模式下使用此扩展时 出现以下错误 混合内容 页面位于 https somesite com
  • FFmpeg 将 .mp3 输出保存到变量中

    在我的应用程序中 我想修改各种mp3 然后将它们混合在一起 我知道我可以在 FFmpeg 中使用单个命令行来完成此操作 但它最终可能会非常混乱 因为我需要在每个样本上使用各种过滤器 而我有五个过滤器 我的想法是单独编辑每个样本 将它们保存到
  • LDAP 服务器不可用

    我对此完全是新手 尝试连接到 LDAP 服务器PrincipalContext 我已经尝试了该网站上的所有解决方案 但均无济于事 我尝试过的事情 PrincipalContext insPrincipalContext new Princi
  • 更好的过滤集合模式

    我有一个名为Games我希望用户使用复选框来过滤集合 每次选中 取消选中复选框时 都会调用流星订阅来显示相应的内容Games 以下是订阅的示例 不是正确的 mongo 代码 region east west eu skill casual
  • YAJSW窗口服务未启动

    我有一个 Java 应用程序 我希望它作为窗口服务运行 为此我选择了 YAJSW 我已经使用我的 Java 进程 ID 运行了 GetConfig bat 并且它已生成配置文件 我已将用户名和密码放入配置文件中并运行 runConsole
  • R XTS to.mines5(),未按“I”预期进行转换

    您好 我正在将一些 1 分钟的数据转换为 5 分钟的数据 我发现第一次增量需要 4 分钟 然后继续执行 5 分钟的增量 我尝试过使用所有 indexAt 参数 但没有一个给我想要的 从 5 开始 然后是 10 15 20 等 我试过了 x5
  • 在2.0.0M1中安装Grails Spock插件

    我正在尝试 Grails 2 0 0M1 和 Springsource Tool Suite 2 7 1 但在安装 spock 插件时遇到问题 当我运行 grails install plugin spock 0 6 groovy 1 8
  • 如何在 Android 市场中从免费应用程序链接到付费应用程序?

    如果我在 Android 市场上有付费应用程序的免费版本 如何在免费应用程序中放置一个按钮来打开市场中的付费版本 更好的是使用 market details 而不是 market search Intent intent new Inten
  • 模拟器网络IP地址和虚拟路由器

    我在 Windows 上使用 Android 模拟器 Android 开发人员文档表示 模拟器的每个实例都在虚拟路由器 防火墙服务后面运行 每个实例的虚拟路由器管理 10 0 2 24 网络地址空间 但是 当我使用以下命令连接到模拟器时ad
  • 如何检查程序空闲时间而不是系统空闲时间?

    我有一个程序 偶尔需要递归地扫描一些目录 这部分程序的改进正在酝酿中 但暂时还没有准备好 为了避免用户必须等待此扫描 我希望尽可能在用户不使用我的程序时进行扫描 我打算通过运行一个检查空闲时间的计时器来实现它 我发现以下内容用于检查系统空闲
  • 带有递归的字符串排列

    我是一名java初学者 正在尝试从java编程书中进行字符串排列练习 我定义了两种方法 public static void displayPermutation String s public static void displayPer