字符串全排列
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();