java程序员面试宝典7.4--输出几个数字所有不同的排列顺序
import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Set;public class PlusTriple {private static HashMap<String, Integer> resultMap = new HashMap<String, Integer>();public static void main(String args[]) {List<Integer> input = new LinkedList<Integer>();input.add(1);input.add(2);input.add(2);input.add(3);input.add(4);int[] result = new int[input.size()];fullArray(input, 0, result);// 打印结果Set<String> results = resultMap.keySet();Iterator<String> it = results.iterator();while (it.hasNext()) {System.out.println(it.next());} }public static void fullArray(List<Integer> input, int layer, int[] result) {if (input.isEmpty()) { // 后面没排序的元素集合为空,输出一次result集合StringBuffer ss = new StringBuffer();for (int i = 0; i < 5; i++) {ss.append(result[i]);}if (!resultMap.containsKey(ss.toString())) {resultMap.put(ss.toString(), 1);}return;}for (int i = 0; i < input.size(); i++) {result[layer] = input.get(i);List<Integer> newRefer = new LinkedList<Integer>();for (int j = 0; j < input.size(); j++) {newRefer.add(input.get(j));}newRefer.remove(i); // 深拷贝一个新的input集合,把正在处理的元素,从当前的input集合中拿掉fullArray(newRefer, layer + 1, result);}}}