44 lines
684 B
Python
44 lines
684 B
Python
# Get the millionth lexicographic permutation of the digits
|
|
# 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
|
|
|
import math
|
|
|
|
def fac(n):
|
|
if n == 0:
|
|
return 1
|
|
else:
|
|
return n * fac(n-1)
|
|
|
|
def getPermutation(n, s):
|
|
p = sorted(s)
|
|
l = len(s)
|
|
x = n - 1
|
|
seq = []
|
|
|
|
assert n > 0
|
|
assert l > 0
|
|
assert n <= fac(l)
|
|
|
|
f = fac(l)
|
|
while l > 0:
|
|
part = math.floor(f / l)
|
|
f /= l
|
|
y = math.floor(x / part)
|
|
x -= y * part
|
|
seq.append(y)
|
|
l -= 1
|
|
|
|
res = []
|
|
for se in seq:
|
|
res.append(p.pop(se))
|
|
|
|
return res
|
|
|
|
def main():
|
|
print("Hello, this is Patrick")
|
|
|
|
r = getPermutation(1000000, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
|
|
print(r)
|
|
|
|
if __name__ == "__main__":
|
|
main() |