剣指offerプログラミング問題(JAVA実現)——第27題:文字列の配列
github
https://github.com/JasonZhangCauc/JZOffer
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;
}
}