leetcode 650 只有兩個鍵的鍵盤

2021-08-22 18:09:08 字數 1235 閱讀 9323

題目描述:

最初在乙個記事本上只有乙個字元 '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 輸出能夠...