介绍
让我们观察以下序列(非负整数):
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
例如,让我们采用前三个数字。这些是0, 1, 2
。此序列中使用的数字可以以六种不同的方式排序:
012 120
021 201
102 210
因此,假设F(3)= 6。另一个示例是F(12)。其中包含数字:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
或串联的版本:
01234567891011
为了找到重新排列此方法的方法,我们首先需要查看此字符串的长度。该字符串的长度为14
。因此,我们计算出14!。但是,例如,那些人可以交换位置而不会破坏最终的琴弦。有2个零,所以有2个!在不破坏顺序的情况下消除零的方法。也有4个,所以有4个!切换方式。我们将总数除以这两个数字:
这个有14个!/(4!×2!) = 1816214400排列字符串的方式01234567891011
。因此我们可以得出F(12)= 1816214400的结论。
任务
给定N,输出F(N)。对于那些不需要介绍的人。为了计算F(N),我们首先将前N个非负整数连接起来(例如,对于N = 12,则连接的字符串将是01234567891011
),然后计算排列该字符串的方式数量。
测试用例
Input: Output:
0 1
1 1
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
9 362880
10 3628800
11 119750400
12 1816214400
13 43589145600
14 1111523212800
15 30169915776000
注意
计算的答案必须在内部被计算为10秒的时间限制,暴力破解是不允许的。
这是代码高尔夫球,因此以最少的字节提交为准!
10
前两位数字是0, 1, 2, 3, 4, 5, 6, 7, 8, 9
。十个不同的数字,因此结果是10!。
0
此案使我的计票失败(愚蠢的空字符串)。
F(N)
是不是O(N!)
那log F(N)
是O(log N!)
,但这些都只是预感......
10
正确吗?感觉应该小于10 !,因为那是重复数字的起点。