劍指offer程式設計題(JAVA實現)——第27題:字串的排列
阿新 • • 發佈:2018-12-27
github | https://github.com/JasonZhangCauc/JZOffer |
---|
import java.util.ArrayList;
import java.util.Collections;
/**
*
* 劍指offer程式設計題(JAVA實現)——第27題:字串的排列
*
* 題目描述
* 輸入一個字串,按字典序打印出該字串中字元的所有排列。
* 例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。
* 輸入描述:
* 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。
*
*/
public class Test27 {
public static void main(String[] args) {
System.out.println(Permutation("abc").toString());
}
public static ArrayList<String> Permutation(String str) {
ArrayList<String> list = new ArrayList<>();
if (str.length() > 0) {
PermutationHelper(str.toCharArray (), 0, list);
}
Collections.sort(list);// 按字典序排序
return list;
}
private static void PermutationHelper(char[] charArray, int i, ArrayList<String> list) {
if (i == charArray.length - 1) {
if (!list.contains(String.valueOf(charArray))) {
list.add(String.valueOf(charArray));
}
} else {
for (int j = i; j < charArray.length; j++) {
swap(charArray, i, j);
PermutationHelper(charArray, i + 1, list);
swap(charArray, i, j);// 復原
}
}
}
private static void swap(char[] charArray, int i, int j) {
char tmp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = tmp;
}
}