介绍
让我们观察以下序列(非负整数):
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 !,因为那是重复数字的起点。