初始化数组f用于存放阶乘 f[0]=1 for i=1 to n-1 f[i]=f[i-1]*i return f
编码
CT(Z)
1 2 3 4 5 6 7 8 9 10
l=z.len FAC(l) 初始化res=0 for i=0 to l-1 count=0 for j=i+1 to l-1 if z[j]<z[i] count=count+1 res=res+f[n-i-1]*count return res
解码
CT(Z)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
初始化数组res用于存放第n个z 初始化数组book全部置0用于标记 l=z.len; FAC(l) sort(z); for i=0 to l-1 t=n/f[l-i-1] for j=0 to l-1 if !book[j] if t==0 break t=t-1 res[i]=z[j] book[j]=1 n=n%f(l-i-1) return res