0

我正在尝试打印字符串的所有排列。但是,尽管我尽了最大的努力,我还是无法为我的代码获得所需的输出。有人可以解释我的代码有什么问题吗?我已经尝试了很多小时,但惨遭失败。

以下代码的输出是:-

美国广播公司

这是回溯的置换函数:-

int i, l = 2;
void permute(String str, int n)
{
    for(i=n;i<=l;i++)
    {
        if(n==l)
        {
            System.out.println(swap(str,n,i));
            return;
        }
        else
            permute(swap(str,n,i),n+1);
    }
}

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

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;
}
4

1 回答 1

0

不要在方法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), 的值为i2,但在您之后return;它仍然是 2,因为它的全局范围。所以在下一次迭代中它增加到 3,因此i<=l结果为假,程序结束。
如果你i在循环中声明它,在你之后return;它将回到 1 以便循环可以继续。

于 2016-12-07T11:09:19.053 回答