title: Why is time complexity O(n!) not O(n * n!)
body: <p>Here's a <a href="https://www.youtube.com/watch?v=KukNnoN-SoY&amp;t=705s" rel="nofollow noreferrer">link to a youtube video @ 11:50</a> which shows the following recursive tree:</p>
  <p><a href="https://i.stack.imgur.com/xORfY.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/xORfY.png" alt="screenshot of recursive tree shown in video" /></a></p>
  <p>The code would be something like:</p>
  <pre class="lang-py prettyprint-override"><code>class Solution:
      def permute(self, nums: List[int]) -&gt; List[List[int]]:
          res = []
          
          def helper(curr: List[int], remains: List[int], res: List[List[int]]):
              if not remains:
                  res.append(curr)
                  return
              
              for i in range(len(remains)):
                  next_num = remains[i]
                  helper(curr + [next_num], [num for num in remains if num != next_num], res)
                  
          helper([], nums, res)
          return 
  </code></pre>
  <p>The video said there is <em>O</em>(n!) function call, however it seems to be a bit more so may be this is roughly, however in every step we have to copy over at worst n elements for new remaining array, so why does that not become <em>O</em>(n * n!)</p>