字符串全排列

T1: 字符串全排列
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;

public class PermutationII {

	public static void main(String[] args) {
		
		String str = "aba";
		ArrayList<String> list = permutation(str);
		for(String i: list)
			System.out.print(i + " ");
	}
	
	public static ArrayList<String> permutation(String str){
		ArrayList<String> re = new ArrayList<String>();
		if(str == null || str.length() == 0)
			return re;
		
		HashSet<String> set = new HashSet<String>();
		fun(set, str.toCharArray(), 0);
		re.addAll(set);
		Collections.sort(re);
		return re;
	}
	
	public static void fun(HashSet<String> re, char[] chas, int k){
		if(k == chas.length){
			re.add(new String(chas));
			return;
		}
		
		for(int i = k; i < chas.length; i++){
			swap(chas, i, k);
			fun(re, chas, k+1);
			swap(chas, i, k);
		}
	}
	
	public static void swap(char[] chas, int i, int j){
		if(i != j){
			char tmp = chas[i];
			chas[i] = chas[j];
			chas[j] = tmp;
		}
	}
	
	

}

  



T2: 数组排成最小数(在Collections.sort中传入比较器)

	if(arr == null || arr.length == 0)
			return null;
		
		TreeSet<String> set = new TreeSet<String>();
		ArrayList<String> list = new ArrayList<String>();
		String[] strs = new String[arr.length];
		StringBuffer sb = new StringBuffer("");
		for(int i = 0; i < arr.length; i++){
			strs[i] = String.valueOf(arr[i]);
			list.add(strs[i]);
		}	
		
		Collections.sort(list, new Comparator<String>(){ // 使用匿名内部类在sort中传入比较器
			
			public int compare(String str1, String str2){
				String s1 = str1 + str2;
				String s2 = str2 + str1;
				
				return s1.compareTo(s2);
			}
		});
		
		for(String i : list)
			sb.append(i);
		
		return sb.toString();
		

  

posted @ 2017-04-16 15:36  贾斯彼迭  阅读(188)  评论(0编辑  收藏  举报