題目描述:
最初在乙個記事本上只有乙個字元 '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
leetcode650 只有兩個鍵的鍵盤
最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠列印出 n...
leetCode 650 只有兩個鍵的鍵盤
最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠列印出 n...
leetcode 650 只有兩個鍵的鍵盤
題目描述 最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠...