版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36783389/article/details/82913336
最初在一个记事本上只有一个字符 '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;
}
}
}