Problem Statement :Problem24
A permutation is an ordered arrangement of objects. For example, 3124
is one possible permutation of the digits 1, 2, 3 and 4. If all of the
permutations are listed numerically or alphabetically, we call it
lexicographic order. The lexicographic permutations of 0, 1 and 2 are:
012 021 102 120 201 210
What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
Approach:
Solution:
- Well if the actual number is a0,a1,a2,a3,a4,a5,a6,a7,a8,a9:
a0*9! + a1*8! + a2*7! + ..... + a9*0! = 10^6 - To do this start filling the number from the right
- In every iteration decide the digit at that position and subtract the remaining from count.
- In each iteration we are removing multiples of k!
- Quit when count reaches 0.
Solution:
import java.util.ArrayList;
import java.util.List;
public class problem24 {
public static List list = new ArrayList();
public static long getFactorial(int limit) {
long factorial = 1;
for (int i = 1; i <= limit; i++)
factorial = factorial * i;
return factorial;
}
public static void main(String chars[]) {
long count = 1000000;
int num = 9;
list.add(0);
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
list.add(7);
list.add(8);
list.add(9);
String s = "";
while (count != 0) {
long fact = getFactorial(num--);
int p1 = (int) (count / fact);
s=s+""+list.get(p1);
list.remove(p1);
count = count - fact * p1;
}
System.out.println(s+list.get(0));
}
}
No comments:
Post a Comment