题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
代码如下,java依旧:
import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; public class Solution { HashSet<String> arrangeSet = new HashSet<>(); public void DfsStr(char str[],char sequence[],int step,int strLen,boolean moveFlag[]) { if(step == strLen) { String arrange = new String(sequence); arrangeSet.add(arrange); return; } for(int i = 0; i < strLen; i++) { if(moveFlag[i] == false) { sequence[step] = str[i]; moveFlag[i] = true; DfsStr(str, sequence, step + 1, strLen, moveFlag); moveFlag[i] = false; //回退一步 } } } public ArrayList<String> Permutation(String str) { char sequence[] = new char[str.length()]; boolean moveFlag[] = new boolean[str.length()]; char strArrary[] = str.toCharArray(); ArrayList<String> stringList = new ArrayList<>(); if(str == null || str.isEmpty()) { return stringList; } for(int i = 0; i < str.length(); i++) { moveFlag[i] = false; } DfsStr(strArrary, sequence, 0, str.length(), moveFlag); stringList.addAll(arrangeSet); Collections.sort(stringList); return stringList; } }