题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
import java.util.*; public class Solution { public static ArrayList<String> Permutation(String str) { if(str == null) return null; ArrayList<String> list = new ArrayList<>(); char[] chars = str.toCharArray(); list = allSort(chars, 0, list); Collections.sort(list); return list; } public static ArrayList<String> allSort(char[] chars, int index, ArrayList<String> list){ if(index == chars.length-1){ list.add(String.valueOf(chars)); return list; } for(int i=index; i< chars.length; i++){ if(i != index && chars[i] == chars[index])//当要交换的值相同时 continue; exChangeChars(index, i, chars); //修改第一个与后面的位置 allSort(chars,index+1,list); exChangeChars(index, i, chars);//修改成原来的数组 } return list; } /** * 交换两个字符数组的位置 * @param index1 * @param index2 * @param chars */ public static void exChangeChars(int index1, int index2, char[] chars){ char tmp =chars[index1]; chars[index1] = chars[index2]; chars[index2] = tmp; } }
时间: 2024-08-15 13:19:26