Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于获取返回置换数组的函数的难题_Java_Algorithm_Permutation - Fatal编程技术网

Java 关于获取返回置换数组的函数的难题

Java 关于获取返回置换数组的函数的难题,java,algorithm,permutation,Java,Algorithm,Permutation,我想得到一个方法,它返回输入字符串的所有排列。我在互联网上搜索过,发现大多数代码与的代码相似: 但是,我想返回排列,而不是打印它们。 Robert Sedgewick的代码复制于此: public class Permutations { // print N! permutation of the characters of the string s (in order) public static void perm1(String s) { perm1("", s); }

我想得到一个方法,它返回输入字符串的所有排列。我在互联网上搜索过,发现大多数代码与的代码相似:

但是,我想返回排列,而不是打印它们。 Robert Sedgewick的代码复制于此:

public class Permutations {
    // print N! permutation of the characters of the string s (in order)
    public  static void perm1(String s) { perm1("", s); }
    private static void perm1(String prefix, String s) {
        int N = s.length();
        if (N == 0) System.out.println(prefix);
        else {
            for (int i = 0; i < N; i++)
               perm1(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, N));
        }
    }
    public static void main(String[] args) {
       perm1("abcd");
    }
}
公共类置换{
//打印N!字符串s的字符排列(按顺序)
公共静态void perm1(字符串s){perm1(“,s);}
私有静态void perm1(字符串前缀,字符串s){
int N=s.长度();
如果(N==0)System.out.println(前缀);
否则{
对于(int i=0;i
Robert Sedgewick的代码记录如下:

import java.util.ArrayList;

public class Test {
    public static ArrayList<String> permute(String prefix, String s){
        int len = s.length();
        ArrayList<String> list = new ArrayList<String>();
        if(s.length() == 0)
            list.add(prefix);
        else
            for(int i = 0; i < len; i++)
                permute(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, len));
        return list;
    }
    public static void main(String[] args) {
        String str = "abcd";
        ArrayList<String> array = permute("", str);
        System.out.print(array.size());
    }
}
import java.util.ArrayList;
公开课考试{
公共静态ArrayList排列(字符串前缀,字符串s){
int len=s.length();
ArrayList=新建ArrayList();
如果(s.length()==0)
列表。添加(前缀);
其他的
对于(int i=0;i

但是我的代码没有返回排列。它什么也不返回。我不知道为什么。谁能帮助我?

您需要将排列方法的结果添加到arraylist中:

import java.util.ArrayList;

public class Test {
    public static ArrayList<String> permute(String prefix, String s){
        int len = s.length();
        ArrayList<String> list = new ArrayList<String>();
        if(s.length() == 0)
            list.add(prefix);
        else
            for(int i = 0; i < len; i++)
                list.addAll(permute(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, len)));
        return list;
    }
    public static void main(String[] args) {
        String str = "abcd";
        ArrayList<String> array = permute("", str);
        System.out.print(array.size());
    }
}
import java.util.ArrayList;
公开课考试{
公共静态ArrayList排列(字符串前缀,字符串s){
int len=s.length();
ArrayList=新建ArrayList();
如果(s.length()==0)
列表。添加(前缀);
其他的
对于(int i=0;i
您需要将permute方法的结果添加到arraylist中:

import java.util.ArrayList;

public class Test {
    public static ArrayList<String> permute(String prefix, String s){
        int len = s.length();
        ArrayList<String> list = new ArrayList<String>();
        if(s.length() == 0)
            list.add(prefix);
        else
            for(int i = 0; i < len; i++)
                list.addAll(permute(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, len)));
        return list;
    }
    public static void main(String[] args) {
        String str = "abcd";
        ArrayList<String> array = permute("", str);
        System.out.print(array.size());
    }
}
import java.util.ArrayList;
公开课考试{
公共静态ArrayList排列(字符串前缀,字符串s){
int len=s.length();
ArrayList=新建ArrayList();
如果(s.length()==0)
列表。添加(前缀);
其他的
对于(int i=0;i
导入java.util.ArrayList;
公开课考试{
/**返回给定字符串的所有排列的列表*/
公共静态ArrayList排列(字符串s){
ArrayList accum=新的ArrayList();
排列(累计,“,s);
返回累计;
}
/**
*私人助手方法来做实际工作。
*
*@param accum累加器的结果。
*@param prefix当前前缀。
*@param s要排列的剩余字符串。
*/
私有静态void置换(ArrayList accum、字符串前缀、字符串s){
int len=s.length();
如果(s.length()==0)
累加(前缀);
其他的
对于(int i=0;i
导入java.util.ArrayList;
公开课考试{
/**返回给定字符串的所有排列的列表*/
公共静态ArrayList排列(字符串s){
ArrayList accum=新的ArrayList();
排列(累计,“,s);
返回累计;
}
/**
*私人助手方法来做实际工作。
*
*@param accum累加器的结果。
*@param prefix当前前缀。
*@param s要排列的剩余字符串。
*/
私有静态void置换(ArrayList accum、字符串前缀、字符串s){
int len=s.length();
如果(s.length()==0)
累加(前缀);
其他的
对于(int i=0;i
+1因为它用最小的改动解决了OP的问题,但我还是推荐它,因为它不会在每一步连接
ArrayList
。@Dukeling-我同意,但我试着记住这不是,我只是想说明他哪里出错了。这正是你应该做的,但有效地这样做是解决问题的下一步(即使不是必需的)——我总是尝试比较解决方案的效率,并尝试在我自己和其他人的答案中提及更有效的解决方案(以链接到另一个答案、解释或一些代码的形式)。记住,超越和超越是一个可接受的答案和一个好的/伟大的答案之间的区别。马库斯的答案更好,但你的答案更好。@Dukeling,你好,非常感谢。我对ArrayList、LinkedList和其他方法的速度非常感兴趣,我用ArrayList和LinkedList测试了这个案例,结果是ArrayList比LinkedList快得多