每日leetcode 只有兩個鍵的鍵盤

2021-08-31 07:10:06 字數 870 閱讀 7170

最初在乙個記事本上只有乙個字元 『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] 。

思路:動態規劃的思想,先找規律:

n=1,0次

n=2,2次,複製一次,貼上一次

n=3,3次,複製一次,貼上兩次

n=4,4次,複製一次,貼上三次。或者複製一次貼上一次得到aa,再複製一次,再貼上一次。

n=5,5次,複製一次,貼上四次。

n=6,5次,複製一次,貼上五次。或者複製一次貼上兩次得到aaa,再複製一次貼上一次。或者複製一次貼上一次得到aa再複製一次貼上兩次。

由此可以得到對於n,最多需要n次,而如果可以分解成相同的幾份,則可以減少次數,比如n=6時,目標是aaaaaa,可以分解為兩個aaa或者三個aa,所以轉移公式為:

dp[i] = min(dp[i], dp[j] + i / j);

c++**:

class solution 

}return dp[n];}

};

只有兩個鍵的鍵盤 LeetCode

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

只有兩個鍵的鍵盤

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

只有兩個鍵的鍵盤

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