目录

0650:两个键的键盘(★)

力扣第 650 题

题目

最初记事本上只有一个字符 'A' 。你每次可以对这个记事本进行两种操作:

  • Copy All(复制全部):复制这个记事本中的所有字符(不允许仅复制部分字符)。
  • Paste(粘贴):粘贴 上一次 复制的字符。

给你一个数字 n ,你需要使用最少的操作次数,在记事本上输出 恰好 n'A' 。返回能够打印出 n'A' 的最少操作次数。

示例 1:

输入:3
输出:3
解释:
最初, 只有一个字符 'A'。
第 1 步, 使用 Copy All 操作。
第 2 步, 使用 Paste 操作来获得 'AA'。
第 3 步, 使用 Paste 操作来获得 'AAA'。

示例 2:

输入:n = 1
输出:0

提示:

  • 1 <= n <= 1000

分析

操作必然是先复制再粘贴 k 次的形式。而这等价于将个数乘以 k+1。

因此可以将问题转化为,求 n 的一个因数分解形式,使得因数和最小。

根据代数知识可知,质因数分解形式的因数和最小,因此将 n 质因数分解即可。

解答

1
2
3
4
5
6
7
8
def minSteps(self, n: int) -> int:
    res = 0
    for i in range(2, int(sqrt(n))+1):
        if n%i == 0:
            while n%i==0:
                n //= i
                res += i
    return res + (n if n>1 else 0)

40 ms