最初在乙個記事本上只有乙個字元 '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] 。這道題注意兩個字眼:
(1)恰好 n 個 'a',
(2)部分的複製是不允許的
演算法一:
解析:如果是30,那麼可以分成 310, 也就是10再黏貼2次, 而10可以分成25, 也就是5再黏貼一次,而5我們只能通過1再黏貼4次得來。因為他要求的是剛剛好等於n,而且部分複製不允許。
(1)而310也就是3個10,他需要複製黏貼的次數是1次複製2次黏貼,所以還是3次操作。
(2)而25 也就是2個5, 他需要複製黏貼的次數是1次複製1次黏貼,所以是2次操作。
(3)5是個素數,他需要複製黏貼的次數是1次複製4次黏貼, 所以是5次操作。
那麼把他們加起來,3+2+5就是10次
到了素數,他所需要的次數就是他本身
所以我們可以感覺到其實就是因式分解的過程。
學好數學很重要啊,直接上**吧:
public int minsteps(int n)
int sum= 0;
for(int i=2; i<=n; i++)
}return sum;
}
演算法二
用動態規劃來求得
素數就只能是n種方法,偶數就是dp[n/2]+2次,奇數是他的最大約數w,dp[w]+n/w次
650 只有兩個鍵的鍵盤
最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字n。你需要使用最少的操作次數,在記事本中列印出恰好n個 a 輸出能夠列印出n個 a ...
leetcode 650 只有兩個鍵的鍵盤
題目描述 最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字n。你需要使用最少的操作次數,在記事本中列印出恰好n個 a 輸出能夠列印出...
leetcode650 只有兩個鍵的鍵盤
最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠列印出 n...