【劍指Offer】字串全排列
阿新 • • 發佈:2019-02-17
題目描述
輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。
輸入描述
輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。
思路分析
遞迴的思路暫時還存在問題!!!!
程式碼實現
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<String> Permutation (String str) {
ArrayList<String> res = new ArrayList();
if(str == null || str.length() == 0){
return res;
}
PermutationHelper(str.toCharArray(),0,res);
Collections.sort(res);
return res;
}
private void PermutationHelper(char[] str,int n,List<String> res){
if(n == str.length){
res.add(String.valueOf(str));
}
int i = n;
for(int j = i; j < str.length; j++){
if(i != j && str[i] == str[j]){
continue;
}
swap(str,i,j);
PermutationHelper(str,i+1 ,res);
swap(str,i,j);
}
}
/**
* 交換字串中的兩個字元
*/
private void swap(char[] str,int i,int j){
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}