📜  打印Java字符串的所有排列(1)

📅  最后修改于: 2023-12-03 15:10:01.181000             🧑  作者: Mango

打印Java字符串的所有排列

本文介绍如何打印一个Java字符串的所有排列。我们将采用递归算法实现该功能。

递归算法

递归是一种使用函数自身调用的算法。在本例中,我们使用递归算法来生成所有可能的排列。

递归算法的思想是将问题分解为小问题,然后将小问题逐步解决。在这个例子中,我们将字符串分解为两部分:第一个字符和其余字符。我们将第一个字符移动到字符串的末尾,并生成所有剩余字符的排列。然后从生成的排列中删除第一个字符,并将该字符移动到字符串的末尾。我们循环执行此操作直到字符串为空。

代码实现
public class StringPermutation {
    public static void main(String[] args) {
        String str = "abcd";
        printPermutations(str.toCharArray(), str.length());
    }

    public static void printPermutations(char[] str, int size) {
        if (size == 1) {
            System.out.println(String.valueOf(str));
            return;
        }

        for (int i = 0; i < size; i++) {
            printPermutations(str, size - 1);

            char ch;
            if (size % 2 == 0) {
                ch = str[i];
                str[i] = str[size - 1];
                str[size - 1] = ch;
            } else {
                ch = str[0];
                str[0] = str[size - 1];
                str[size - 1] = ch;
            }
        }
    }
}
示例输出

以下是使用上面代码的示例输出。我们使用字符串 abcd 作为输入。

abcd
abdc
acbd
acdb
adcb
adbc
bacd
badc
bcad
bcda
bdca
bdac
cbad
cbda
cabd
cadb
cdab
cdba
dbca
dbac
dcba
dcab
dacb
dabc
总结

通过递归算法,我们可以方便地生成字符串的所有排列。这是一个简单而强大的算法,可以用于许多不同的应用程序中。