仅供参考
- package com.itheima;
- /*
- * 第6题:编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
- * 原始字符串是"abc",打印得到下列所有组合情况:
- * "a" "b" "c"
- * "ab" "bc" "ca" "ba" "cb" "ac"
- * "abc" "acb" "bac" "bca" "cab" "cba"
- * 分析:将字符串所有可能出现的排列组合的子串看做两部分:前缀和剩余部分。前缀不用修改,遍历并剩余部分,将
- * 剩余部分的每个字符切割拼接到前缀并打印,递归获取所有组合。若剩余部分长度为1,则不必切割,直接和前缀拼接。
- */
- public class Test6 {
- public static void main(String[] args) {
- getAllSort("", "abc");
- }
- private static void getAllSort(String prefix, String strLeft) {
- //若剩余部分长度为1,则直接打印前缀和剩余部分拼接的结果
- if (strLeft.length() == 1) {
- System.out.println(prefix + strLeft);
- return;
- }
- //循环遍历字符串的剩余部分
- for (int i = 0; i < strLeft.length(); i++) {
- //定义字符串缓冲区方便对字符串的操作
- StringBuilder sb = new StringBuilder(strLeft);
- //获取前缀和剩余部分的每个字符拼接的新字符串并打印
- String str = prefix + strLeft.substring(i, i + 1);
- System.out.println(str);
- //将获取的新字符串作为前缀,去除字符串缓冲区中已拼接到前缀的字符后得到的字符串作为剩余部分,递归获取
- getAllSort(str, sb.deleteCharAt(i).toString());
- }
- }
- }
复制代码 |