算法篇8-LeetCode650. 只有两个键的键盘

一道有意思的题目

只有两个键的键盘

这题目自己思考了一下,还真的挺有意思的。首先,得知道如果输入的数n是一个素数,那么就必须得用n次操作才能完成,因为素数不能拆成任何数的乘积,所以只能一个一个复制粘贴。然后考虑的是合数,如果合数能拆成多个素数的乘积,那就是先复制粘贴一个素数,再对素数进行复制粘贴,就能得到合数了。所以,这道题目就变成了输入的n拆成素数乘积的形式,而操作的次数正好是拆成的素数的和。
代码如下:

public int minSteps(int n) {
        /**
         *
         * 功能描述: 最初在一个记事本上只有一个字符 'A'。你每次可以对这个记事本进行两种操作:
         *
         * Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。
         * Paste (粘贴) : 你可以粘贴你上一次复制的字符。
         * 给定一个数字 n 。你需要使用最少的操作次数,在记事本中打印出恰好 n 个 'A'。输出能够打印出 n 个 'A' 的最少操作次数。
         *
         *
         * @param: [n]
         * @return: int
         * @auther: smallfish
         * @date: 2020-03-22 19:53
         */
        int result = 0;
        int start = 2;
        while (start > 0) {
            while (n % start == 0) {
                n = n / start;
                result += start;
            }
            start += 1;
            if(n==1){
                break;
            }
        }
        return result;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容