1. 程式人生 > >LeetCode-650. 只有兩個鍵的鍵盤

LeetCode-650. 只有兩個鍵的鍵盤

最初在一個記事本上只有一個字元 'A'。你每次可以對這個記事本進行兩種操作:

  1. Copy All (複製全部) : 你可以複製這個記事本中的所有字元(部分的複製是不允許的)。
  2. Paste (貼上) : 你可以貼上你上一次複製的字元。

給定一個數字 n 。你需要使用最少的操作次數,在記事本中打印出恰好 n 個 'A'。輸出能夠打印出 n 個 'A' 的最少操作次數。

示例 1:

輸入: 3
輸出: 3
解釋:
最初, 我們只有一個字元 'A'。
第 1 步, 我們使用 Copy All 操作。
第 2 步, 我們使用 Paste 操作來獲得 'AA'。
第 3 步, 我們使用 Paste 操作來獲得 'AAA'。

說明:

  1. 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;
        }
    }
}