1. 程式人生 > >劍指offer第27題(字串排列)

劍指offer第27題(字串排列)

題目:

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

輸入描述:

輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。

思路:首先求所有可能會出現第一個位置的字元,即把第一個字元和後面所有的字元交換。第二步是固定第一個字元,求後面所有數字的排列。(遞迴)

程式碼:

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

輸入描述:

輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。

importjava.util.ArrayList;
import java.util.Collections;

public class Solution {
    public ArrayList<String> Permutation(String str) {
        ArrayList<String> res = new ArrayList<String>();
        if(str==null || str.length()==0){
            return res;
        }
        char
[] chars=str.toCharArray(); permutationhelper(res,0,chars); Collections.sort(res); return res; } public void permutationhelper(ArrayList<String> res,int index,char[] chars){ if(index==chars.length-1){ res.add(new String(chars)); } for
(int i=index;i< chars.length;i++){ if(i==index || chars[index]!=chars[i]){ swap(chars,index,i); permutationhelper(res,index+1,chars); swap(chars,index,i); } } } public void swap(char[] chars,int i,int j){ char c=chars[i]; chars[i]=chars[j]; chars[j]=c; } }

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

輸入描述:

輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。