题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路:本质就是全排列的问题,具体思路见剑指offer的P155的那个图,主要就是采用循环递归的思想。
代码如下:
import java.util.ArrayList; import java.util.Collections; public class Solution { ArrayList<String> list = new ArrayList<>(); public ArrayList<String> Permutation(String str) { if(str==null||"".equals(str)){ return list; } char[] array = str.toCharArray(); int len = array.length; list.add(str); allsortStr(array,0); Collections.sort(list); return list; } public void allsortStr(char[] array,int index){ if(index==array.length-1){ String t = new String(array); if(!list.contains(t)){ list.add(t); } } for(int i=index;i<array.length;i++){ char temp = array[index]; array[index] = array[i]; array[i] = temp; allsortStr(array,index+1); temp = array[index]; array[index] = array[i]; array[i] = temp; } } }