gpt4 book ai didi

java - 字符串排列

转载 作者:行者123 更新时间:2023-12-02 07:18:15 25 4
gpt4 key购买 nike

我最近试图编写一个脚本,用 Java 打印出单词的所有排列。由于某种原因它只打印出一份。我就是想不通!

import java.util.*;

public class AllPermutations {

ArrayList<String> letters = new ArrayList<String>();
public void main(){
letters.add("H");
letters.add("a");
letters.add("s");
permutate("",letters);
}

public void permutate(String word, ArrayList<String> lettersLeft){
if(lettersLeft.size()==0){
System.out.println(word);
}else{
for(int i=0;i<lettersLeft.size();i++){
String newWord = new String();
newWord = word+lettersLeft.get(i);
lettersLeft.remove(i);
permutate(newWord, lettersLeft);
}
}
}
}

最佳答案

您需要将已删除的字母添加回 letterLeft 列表

public void permutate(String word, ArrayList<String> lettersLeft){
if(lettersLeft.size()==0){
System.out.println(word);
}else{
for(int i=0;i<lettersLeft.size();i++){
String temp = lettersLeft.remove(i);
String newWord = word+temp;
permutate(newWord, lettersLeft);
lettersLeft.add(i, temp);
}
}
}

我还没有测试过,但我认为它应该有效。

问题在于Java/您是通过引用传递的,而不是复制(ArrayList)。因此,一旦到达递归树的底部,lettersLeft 将包含 0 个元素,而一旦返回,它仍将包含 0 个元素。

顺便说一句,StringBuilder/StringBuffer 更擅长执行字符串排列任务,因为 String 是不可变的,因此您会浪费大量资源来创建新的字符串,n!准确地说。这两个 StringBuilder/Buffer 之间的区别由您来发现。

关于java - 字符串排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14638970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com