📌  相关文章
📜  使用ArrayList打印字符串的所有排列(1)

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

使用ArrayList打印字符串的所有排列

在Java中,我们可以使用ArrayList来存储字符串的所有排列。排列是指从一组元素中取出一些元素(有序的),重新排列这些元素,生成新的组合。对于一个给定的字符串,我们需要找到其所有可能的排列,然后打印出来。

实现思路

使用递归的方式来实现字符串的排列。具体的实现流程如下:

  1. 定义一个ArrayList来存储所有组合可能的字符串
  2. 判断字符串是否为空,如果为空则返回空列表
  3. 如果字符串只有一个字符,那么它的排列就是它本身,将其存储到列表中并返回
  4. 从字符串中取出一个字符,然后递归调用该函数来求出其余字符的排列
  5. 将第4步得到的排列与第3步得到的字符进行组合,将组合后的排列存储到列表中并返回
  6. 重复执行4、5两个步骤,直至所有字符都参与了排列生成,最终得到的列表即为所有可能的排列
实现代码
import java.util.ArrayList;

public class StringPermutation {
    public static ArrayList<String> getPermutations(String str) {
        ArrayList<String> permutations = new ArrayList<String>();
        if (str == null || str.length() == 0) {
            permutations.add("");
            return permutations;
        }
        char first = str.charAt(0);
        String rest = str.substring(1);
        ArrayList<String> words = getPermutations(rest);
        for (String word : words) {
            for (int i = 0; i <= word.length(); i++) {
                String permutation = insertCharAt(word, first, i);
                permutations.add(permutation);
            }
        }
        return permutations;
    }
    public static String insertCharAt(String word, char c, int index) {
        String start = word.substring(0, index);
        String end = word.substring(index);
        return start + c + end;
    }
}
示例

下面的代码演示了如何使用上面的类来打印出"abc"的所有可能的排列:

import java.util.ArrayList;
public class Main {
    public static void main(String[] args) {
        ArrayList<String> permutations = StringPermutation.getPermutations("abc");
        for (String permutation : permutations) {
            System.out.println(permutation);
        }
    }
}

输出结果:

abc
acb
bac
bca
cab
cba