剣指offerプログラミング問題(JAVA実現)——第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;

	}

}