LeetCode-650. 只有兩個鍵的鍵盤
阿新 • • 發佈:2018-12-12
最初在一個記事本上只有一個字元 '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的倍數就遞迴 f(n/2)+2,如果都不是的話就遍歷它的約數
按照先找湊出那個約數最少的步數再加上n/約數,後者表示貼上約數和複製的總次數
solution:
class Solution { public int minSteps(int n) { if(n==1) return 0; else if(n%2==0) return minSteps(n/2)+2; else{ int num = Integer.MAX_VALUE; for(int i=1;i<=n/2;i++){ if(n%i==0){ num = Math.min(num,minSteps(i)+n/i); } } return num; } } }