Java中查找置换的最有效方法[具有较低的渐近复杂性]

Java中查找置换的最有效方法[具有较低的渐近复杂性],java,algorithm,Java,Algorithm,我的目标是找到字符串的所有排列。在快速搜索之后,我找到了一个简单的方法来查找字符串的所有排列。即 private static void permutation(String prefix, String str) { int n = str.length(); if (n == 0) System.out.println(prefix); else { for (

我的目标是找到字符串的所有排列。在快速搜索之后,我找到了一个简单的方法来查找字符串的所有排列。即

    private static void permutation(String prefix, String str) 
    {
        int n = str.length();
        if (n == 0)
            System.out.println(prefix);
        else 
        {
            for (int i = 0; i < n; i++)
                permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n));
        }
   }
私有静态无效置换(字符串前缀,字符串str)
{
int n=str.length();
如果(n==0)
System.out.println(前缀);
其他的
{
对于(int i=0;i
我相信这个方法的复杂性是O(n!)(如果我错了,请纠正我)。 我的问题是:
我可以再调整一下以提高效率吗?还是有更好的替代方案来生成所有排列?

看起来您使用的是以下答案:

关于这个问题的评论内容丰富。在字符串操作方面有很多低效的地方,它打印重复的字符,不考虑重复的字符,还有一些其他的


我会仔细检查这些,实现建议的更改,然后比较看您的运行时改进是什么。从根本上说,我相信你是受n限制的!您所能做的最多就是调整内存/数据结构,以避免由于此处使用的结构应用效率低下而导致的空间/时间复杂性爆炸

可能重复的,除非有重复的字符,否则它将是O(n!)@dr_debug出于性能目的删除递归是什么意思?您是否建议使用循环而不是递归?