递归的字符串排列?

时间:2016-01-23 15:28:15

标签: java string recursion permutation

所以我试图解决的问题是使用递归创建一个使用递归创建字符串排列的程序:

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

第一种方法只是调用一个辅助方法,然后该方法应该使用一个循环,将一个字符从s2(即初始字符串)连续移动到最初为空的s1。

下面,我尝试了以下从s2到s1逐个递归移动字符的方法,但是由于某种原因我不断收到错误:

    public static void displayPermutation(String s) {
    //Invoke second displayPermutation method
    displayPermutation("", s);
}

public static void displayPermutation(String s1, String s2) {
    //Stopping condition
    if (s2 == "")
        System.out.println(s1);

    else {
        displayPermutation(s1 + s2.substring(0, 1), s2.substring(1));
}

3 个答案:

答案 0 :(得分:2)

您无法将字符串与==进行比较,而是使用.equals()。你还需要一个遍历s2中所有可用字符的循环。

public class Permutations {
    public static void displayPermutation(String s) {
        //Invoke second displayPermutation method
        displayPermutation("", s);
    }

    public static void displayPermutation(String s1, String s2) {
        //Stopping condition
        if (s2.equals("")) {
            System.out.println(s1);
        } else {
            for(int i = 0; i < s2.length(); i++) {
                displayPermutation(s1 + s2.substring(i, i+1), s2.substring(0, i) + s2.substring(i+1));
            }
        }
    }

     public static void main(String[] args) {
        displayPermutation("abc");
     }
}

答案 1 :(得分:1)

以递归方式获取Permutation(如果需要单词的镜像::字符串字母的permuation),则需要使用

  

s2.substring(s2.length-1,s2.length);

这样你就可以先拿到最后一个角色了。

然后你必须使用

  

s2.substring(0,s2.length-1);

口头上我们从右到左取最后一个字符。

答案 2 :(得分:0)

为了获得更好的程序和答案,我发现http://javainhouse.blogspot.in/2016/01/program-in-java-to-print-fibonacci.html程序完全使用了递归方法