字符串的排序
阿新 • • 發佈:2018-07-29
perm 字典序 [] port com new ring class 第一個字符
劍指 offer
題目描述
輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串abc,則打印出由字符a,b,c所能排列出來的所有字符串abc,acb,bac,bca,cab和cba。
思路:
看完劍指 offer 才知道,覺得主要是回溯法。遞歸。
兩步:
- 求第一個位置上所有可能出現的字符,即將第一個字符和後面的字符交換
- 固定第一個字符,求後面字符的排序,然後把後面字符分成兩部分,後面字符的第一個字符,以及這個字符後面的所有字符。
import java.util.ArrayList; import java.util.Collections; public class Solution { public ArrayList<String> Permutation(String str) { ArrayList<String> list=new ArrayList<>(); if(str == null||str.length()==0){ return list; } change(list,str,0); //按字符串排序 Collections.sort(list); return list; } public void change(ArrayList<String> list,String str,int index){ if(str.length() == index){ //因為輸入的字符串中可能有重復的字母 if(list.contains(str)){ }else{ list.add(str); } } char[] data=str.toCharArray(); for(int i=index;i<data.length;i++){ char temp=data[index]; data[index]=data[i]; data[i]=temp; change(list,new String(data),index+1); //交換回來 temp=data[index]; data[index]=data[i]; data[i]=temp; } } }
字符串的排序