Leetcode 650

先用几个例子来探究如何做题。

1 -> n = 0

2 -> copy, paste -> n = 2

3 -> copy, paste, paste -> n = 3

4 -> c p p p/ c p c p -> n = 4

5 -> c p p p p -> n = 5

6 -> c p c p p / c p p c p-> n = 5

8 -> c p c p c p -> n = 6

30 -> c p c p p c p p p p/ c p p p p c p c p p -> n = 10

容易发现,如果我们把一个数分解成 a * b * c...,那么最小的 copy/paste 次数就是 a + b + c + ...

怎么证明这一点呢?

首先我们证明 a + b + c... 次操作的确可以得到 a * b * c * ...

假设当前记事本中有 n 个数,那么我们对其进行一次 copy 和 (m - 1) 次 paste 之后,得到的就是 n + (m - 1) * n = m * n

因此通过 m 次操作,我们可以将原有的数变成 n * m。

最开始的时候 n = 1,因此通过 a + b + c... 次操作, n 就变成了 1 * a * b * c...

那么为什么质因数分解可以得到最小次数的操作呢?假设我们的分解方案中存在合数,因为 a * b >= a + b,将合数分解能降低或保持总和不变,因此分解为质因数就是最优方案。

原文地址:https://www.cnblogs.com/KakagouLT/p/15311267.html