只有兩個鍵的鍵盤 LeetCode

2021-10-04 12:33:34 字數 890 閱讀 1262

最初在乙個記事本上只有乙個字元 『a』。你每次可以對這個記事本進行兩種操作:

copy all (複製全部) : 你可以複製這個記事本中的所有字元(部分的複製是不允許的)。

paste (貼上) : 你可以貼上你上一次複製的字元。

給定乙個數字 n 。你需要使用最少的操作次數,在記事本中列印出恰好 n 個 『a』。輸出能夠列印出 n 個 『a』 的最少操作次數。

示例:

輸入: 3

輸出: 3

解釋: 最初, 我們只有乙個字元 『a』。

第 1 步, 我們使用 copy all 操作。

第 2 步, 我們使用paste 操作來獲得 『aa』。

第 3 步, 我們使用 paste 操作來獲得 『aaa』。

說明:

n 的取值範圍是 [1, 1000]

演算法思想:如果n能夠整除2,那麼n/2只需要複製貼上就能得到n(一共需要2步),如果不能整除2就試試3,如果能的話,那麼n/3需要複製(貼上)3就能得到n(一共需要3步),以此類推一直算到n/2還沒有能夠整除的數時,那麼n只能複製貼上n次得到(一共需要n步)。

以100為例,100/2=50,所以由50得到100需要複製貼上2步,將50作為引數遞迴,50/2=25,由25得到50需要複製貼上2步,將25作為引數遞迴,25/5=5,由5得到25需要複製(貼上4)5步,將5作為引數遞迴,5只能由1複製(貼上*4)5步得到。所以100最少操作次數為2+2+5+5=14

**實現:

int minsteps(

int n)

演算法效能分析:

只有兩個鍵的鍵盤

最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠列印出 n...

只有兩個鍵的鍵盤

最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠列印出 n...

每日leetcode 只有兩個鍵的鍵盤

最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠列印出 n...