赞问题!
首先,是的,时间复杂度是O(n*n!)。并且不可能避免这个时间开销。因为算法要求输出所有的排列。n个元素的所有排列一共是n!个序列,每个序列包含n个元素。所以问题的输出就包含n*n!个元素,至少需要这么多时间才能得到这个输出:)
另一方面,从复杂度分析的角度,O(n*n!)和O(n!)确实不一样,但是整体而言,他们都是“阶乘级别的复杂度”。这是因为O(n*n!) <= O((n + 1) * n!) = O((n + 1)!),换句话说,我们可以找到一个O(n*n!)的另外一个上界,就是O((n+1)!),他还是阶乘的形式,只是是多少的阶乘有变化。(n还是n+1)在不严谨的复杂度分析中,我们都说他们是阶乘复杂度。同理,O(2^n)和O(3^n)其实是不一样的,在不严谨的复杂度分析中,我们都说他是指数复杂度:)类似的还有多项式复杂度,对数复杂度,等等:)
继续加油!:)