|
|
发表于 2018-3-31 20:31:39
|
显示全部楼层
本帖最后由 JAY饭 于 2019-4-28 19:31 编辑
- temp = [0,1,2,3,4,5,6,7,8,9]
- count = []
- count1 = 1
- for i in range(1,10):
- count1 *= i
- count.append(count1)
- count.reverse()
- print(count)
- # [362880, 40320, 5040, 720, 120, 24, 6, 2, 1]
- #这里count的意义其实就是每往下一层所有的排列总和:
- #举个栗子,以0,1,2,开头的排列每一种分别有362880种,以01或者02,03....开头的排列的分别有40320,
- #以012,013,014或者其他开头的排列分别有5040种
- def y(num):
- t = []
- for i in count:
- print(num//i)
- if num%i: #这里就是依次求出它们当前位置的数值,
- a = temp[num//i] #比如这里如果362880%362880,说明此时排在第一位的是1,
- else: #如果是362879%362880,此时第一位是0,
- a = temp[num//i-1]#如果是362881%362880,此时第一位是1,第一位确定后,排除
- temp.remove(a) #第一位,接着计算下一个位置,而此时要排除掉排序上一位的时候总排序数,这个要意会
- num = num - (num//i)*i
- t.append(a)
- t += temp
- print(t)
- y(1000000)
复制代码
|
|