1. 程式人生 > >字符串的排序

字符串的排序

perm 字典序 [] port com new ring class 第一個字符

劍指 offer

題目描述

輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串abc,則打印出由字符a,b,c所能排列出來的所有字符串abc,acb,bac,bca,cab和cba。

思路:

看完劍指 offer 才知道,覺得主要是回溯法。遞歸。

兩步:

  1. 求第一個位置上所有可能出現的字符,即將第一個字符和後面的字符交換
  2. 固定第一個字符,求後面字符的排序,然後把後面字符分成兩部分,後面字符的第一個字符,以及這個字符後面的所有字符。

技術分享圖片

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;
    }
}

}

字符串的排序