LeetCode-650. 只有两个键的键盘

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36783389/article/details/82913336

最初在一个记事本上只有一个字符 '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;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36783389/article/details/82913336