字符串的排列

时间:2011-02-09 20:28:21

标签: java recursion permutation

public class Permute {
    public static void main(String[] args) throws IOException {
        System.out.println("Enter a string");
        BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in));
        String text = bufReader.readLine();
        shuffle("",text);
    }
    public static void shuffle(String dummy, String input){
        if(input.length() <= 1)
            System.out.println(dummy+input);
        else{
            for(int i=0; i <input.length();i++){
                input = input.substring(i,1) + input.substring(0,i) + input.substring(i+1);
                shuffle(dummy+input.substring(0,1),input.substring(1));
            }           
        }
    }
}

尝试打印输入字符串的所有排列。我真的无法猜到哪里出错了,因为在纸面上我发现这个正在执行。哪里出错了。

4 个答案:

答案 0 :(得分:1)

尝试更改您的随机播放:

public static void shuffle(String dummy, String input){
    if(input.length() <= 1)
        System.out.println(dummy+input);
    else{
        for(int i=0; i <input.length();i++){
           shuffle(dummy+input.charAt(i), input.substring(0, i) + input.substring(i+1, input.length()));
        }           
    }
}

答案 1 :(得分:1)

public class Permute {
    public static void main(String[] args) throws IOException {
        System.out.println("Enter a string");
        BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in));
        String text = bufReader.readLine();
        shuffle("",text);
    }
    public static void shuffle(String dummy, String input){
        if(input.length() <= 1)
            System.out.println(dummy+input);
        else{
            for(int i=0; i <input.length();i++){
                input = input.substring(i,i+1) + input.substring(0,i) + input.substring(i+1);
                shuffle(dummy+input.substring(0,1),input.substring(1));
            }           
        }
    }
}

它应该是input.substring(i,i + 1)而不是input.substring(i,1)。因为每次我只需要1个字符是常量,这是在字符串的开头,而其他字符必须是混乱的。

该错误是我假设substring的功能是substring(beginIndex,length)。但它是substring(beginIndex,endIndex)。

@Oli:谢谢你的帮助。

答案 2 :(得分:0)

由于这似乎是我曾经做过的家庭作业,我会帮助你。你需要两个循环,一个在另一个内。

for(int i;i<something;i++)  
    for(int j;j<somethingElse;j++)

这将使您能够生成所需的排列。

答案 3 :(得分:0)

用以下代码替换for循环中的两行:

 String partString = input.substring(0, i) + input.substring(i + 1);
 shuffle(dummy + input.charAt(i), partString);

因为这看起来像你的作业,我会让你弄明白。如果没有,会稍后发布解释(得到回到我的日常工作;))