回溯不适用于打印字符串的所有组合?

时间:2016-12-07 10:46:44

标签: java dynamic-programming backtracking recursive-backtracking

我正在尝试打印字符串的所有排列。但是,尽管我付出了最大的努力,但我无法获得我的代码所需的输出。有人能解释一下我的代码有什么问题吗?我已经尝试了好几个小时而且失败了。

以下代码的输出为: -

ABC

这是回溯的置换功能: -

public static void main(String args[])
{
    BacktrackTest bt=new BacktrackTest();
    String c="abc";
    bt.permute(c,0);
}

这是运行上述代码的主要功能: -

String swap(String st, int s1, int s2)
{
    char chr[] = st.toCharArray();
    char t;
    t = chr[s1];
    chr[s1] = chr[s2];
    chr[s2] = t;
    st = String.valueOf(chr);
    return st;
}

这是swap的代码: -

/storage/emulated/13/APKs/file.apk

1 个答案:

答案 0 :(得分:0)

请勿在{{1​​}}方法之外定义i。试试这个:

permute

如果您在int l = 2; void permute(String str, int n) { for(int i=n;i<=l;i++) { if(n==l) { System.out.println(swap(str,n,i)); return; } else permute(swap(str,n,i),n+1); } } 循环之外声明i,则返回后调用者的值不会“恢复”。
在您的示例中,当您输入for时,if(n==l)的值为2,但在i之后,由于其全局范围,它仍为2。所以在下一次迭代中它会增加到3,因此return;结果为假,程序结束 如果你在循环中声明i<=l,那么在i之后它将返回到1,这样循环就可以继续。