最初在一個記事本上隻有一個字元 'A'。你每次可以對這個記事本進行兩種操作:
-
(複制全部) : 你可以複制這個記事本中的所有字元(部分的複制是不允許的)。Copy All
-
(粘貼) : 你可以粘貼你上一次複制的字元。Paste
給定一個數字
n
。你需要使用最少的操作次數,在記事本中列印出恰好
n
個 'A'。輸出能夠列印出
n
個 'A' 的最少操作次數。
示例 1:
輸入: 3
輸出: 3
解釋:
最初, 我們隻有一個字元 'A'。
第 1 步, 我們使用 Copy All 操作。
第 2 步, 我們使用 Paste 操作來獲得 'AA'。
第 3 步, 我們使用 Paste 操作來獲得 'AAA'。
說明:
-
的取值範圍是 [1, 1000] 。n
很明顯應該是一道遞歸的題
我的想法是如果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;
}
}
}