题目描述:
最初在一个记事本上只有一个字符 'A'。你每次可以对这个记事本进行两种操作:
Copy All
(复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。Paste
(粘贴) : 你可以粘贴你上一次复制的字符。
给定一个数字 n
。你需要使用最少的操作次数,在记事本中打印出恰好 n
个 'A'。输出能够打印出 n
个 'A' 的最少操作次数。
示例 1:
输入: 3 输出: 3 解释: 最初, 我们只有一个字符 'A'。 第 1 步, 我们使用 Copy All 操作。 第 2 步, 我们使用 Paste 操作来获得 'AA'。 第 3 步, 我们使用 Paste 操作来获得 'AAA'。
说明:
n
的取值范围是 [1, 1000] 。
思路:我们可以从如何做到复制一次,并粘贴最少次数的角度考虑。由于复制一次是当前所有的字符,假设有k个,所以要想复制的字符粘贴有限次并到达n,则必然有a*k=n,其中a是粘贴的次数。当k最大时,a就最小。这变成求n的最大因子或最小因子。当求出最大因子k的时候,并加上粘贴次数a,然后依次对k进行同样的操作,并累加a即可求出最后结果。(其实a是复制和粘贴的操作次数和)
下面是python 代码:
class Solution(object):
def getMaxFactor(self,n):
for i in range(2,n/2+1):
if not n%i:
return i,n/i
return 1,n
def minSteps(self, n):
"""
:type n: int
:rtype: int
"""
a,k = self.getMaxFactor(n)
if a == 1:
if n!=1:return n
return 0
return self.minSteps(k)+a