Pages

Tuesday, September 8, 2009

Euler Problem 24 solution

Time (s): ~0.001
package margusmartseppcode.From_20_to_29;

public class Problem_24 {
 static String perms(int n, String s) {
  int fact[] = { 1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800 };
  return perms(n, s, fact);
 }

 static String perms(int n, String s, int fact[]) {
  StringBuilder sb = new StringBuilder();
  StringBuilder s2 = new StringBuilder(s);
  n--;
  for (int i, g, sl = s2.length(); sl > 0; sl--, n = n % (g)) {
   i = (int) Math.floor(n / (g = fact[sl] / sl));
   sb.append(s2.charAt(i));
   s2.deleteCharAt(i);
  }
  return sb.toString();
 }

 public static void main(String[] args) {
  System.out.println(perms(1000000, "0123456789"));
 }
}

No comments:

Post a Comment