提问者:小点点

使用嵌套循环获取字符串的排列


我写了一个递归方法,使用嵌套循环打印给定字符串的所有排列。它打印所有排列,但不止一次有人能找出问题以及改变什么条件来解决这个问题吗?

public static String swap(String x,int a,int b){
    char list[]=x.toCharArray();
    char tmp=x.charAt(a);
    list[a]=list[b];
    list[b]=tmp;
    return new String(list);
}
public static void perm(String x,String base){
    if(base.length()==3)
        System.out.println(base);
    for(int i=0;i<x.length();i++)
        for(int j=i;j<x.length();j++){
            String tmp=swap(x,i,j);
            perm(tmp.substring(1),base+tmp.charAt(0));
        }
}

示例:输入:“abc”。输出:abc acb abc bac bca bac cba cba abc acb abc acb abc acb abc acb abc abc。


共1个答案

匿名用户

下面是我根据你的代码做的修改版本。

public static void main(String[] args) {
    String str = "abc";
    char[] chars = str.toCharArray();
    perm(chars, 0);
}

public static void swap(char[] x, int a, int b) {
    char tmp = x[a];
    x[a] = x[b];
    x[b] = tmp;
}

public static void perm(char[] x, int idx) {
    if (idx == x.length) {
        for (int i = 0; i < x.length; i++)
            System.out.print(x[i]);
        System.out.println();
    }

    for (int i = idx; i < x.length; i++) {
        swap(x, idx, i);
        perm(x, idx + 1);
        swap(x, idx, i);
    }
}