package euler.p024;import java.util.TreeSet;public class Permute2 { //int[] number = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int[] number = { 0, 1, 2, 3 }; int count = 0; TreeSet<Long> set = new TreeSet<Long>(); /** * @param args */ public static void main(String[] args) { Permute2 p = new Permute2(); p.permute(0); System.out.println(p.count); int n = 1; for (Long i : p.set) { System.out.printf("%04d\n", i); } } void permute(int idx) { if (set.size() > 1000000) set.remove(set.last()); if (set.add(new Long(getNum()))) count++; for (int i = idx; i < number.length; i++) { swap(idx, i); permute(idx + 1); swap(idx, i); } } long getNum() { long n = 0; for (int i = 0; i < number.length; i++) { n = n * 10 + number[i]; } return n; } void swap(int i, int j) { int t = number[i]; number[i] = number[j]; number[j] = t; }}