递归全排列的面试应用
????? 9个数1-9组成三个数,如:327 654 981,每个数字只能用一次,每三个数字组成一个新的数字,第二个数是第一个数的两倍,第三个数是第一个数的三倍,用程序实现。
package com.ll.test;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;public class T1 {/** * @param args */public static void main(String[] args) {List<Integer> l = new ArrayList<Integer>();l.add(1);l.add(2);l.add(3);l.add(4);l.add(5);l.add(6);l.add(7);l.add(8);l.add(9);List<Integer> t = new ArrayList<Integer>();T1 a = new T1();a.fullPermutation(l, t);}public void fullPermutation(List<Integer> list, List<Integer> temp) {if (temp.size() == 9) {checkNumList(temp);return;}for (int i = 0; i < list.size(); i++) {List<Integer> newlist = new LinkedList<Integer>(list);List<Integer> newTemp = new LinkedList<Integer>(temp);newTemp.add(newlist.get(i));newlist.remove(i);fullPermutation(newlist, newTemp);}}public void checkNumList(List<Integer> temp) {int n1 = new Integer(temp.get(0) + "" + temp.get(1) + "" + temp.get(2));int n2 = new Integer(temp.get(3) + "" + temp.get(4) + "" + temp.get(5));int n3 = new Integer(temp.get(6) + "" + temp.get(7) + "" + temp.get(8));if (n1 == n3 * 3 && n2 == n3 * 2)System.out.println(n1 + " " + n2 + " " + n3);}}