public static void main(String[] args) { //准备数据 按位置设置 Map<Integer,Integer> data=new HashMap<Integer,Integer>(); data.put(1, 0); data.put(2,2); data.put(3, 3); data.put(4, 4); data.put(5,5); //用set主要是为了去除重复数据,这种重复是因为在不同的位置上用相同的数据引起的 Set<String> result=new HashSet<String>(); qiongJu(1,data,result);//递归做法 //遍历结果集 int i=1; for(String s:result){ System.out.println(i+"::::"+s); i++; } } //position index static Map<Integer, Integer> value = new HashMap<Integer, Integer>(); public static void qiongJu(int position,Map<Integer,Integer> data,Set<String> result) { // 一组数出炉 if (position > data.size()) { // 打印 StringBuffer sb = new StringBuffer(); for (int j = 1; j <= data.size(); j++) { sb.append(data.get(value.get(j))); } // System.out.println(sb.toString()); result.add(sb.toString()); return; } // 我只解决一位而已 第n位 for (int i = 1; i <= data.size(); i++) { // 第n位前面的数都是什么 int temp = i; boolean flag = false; for (int j = 1; j < position; j++) { if (temp == value.get(j)) { // 数据已被使用 flag = true;// 表示有数据重复问题 break; } } if (!flag) { value.put(position, i); qiongJu(position + 1,data,result); } } }