650. 只有两个键的键盘
最初记事本上只有一个字符 ‘A’ 。你每次可以对这个记事本进行两种操作:
- Copy All(复制全部):复制这个记事本中的所有字符(不允许仅复制部分字符)。
- Paste(粘贴):粘贴 上一次 复制的字符。
给你一个数字 n ,你需要使用最少的操作次数,在记事本上输出 恰好 n 个 ‘A’ 。返回能够打印出 n 个 ‘A’ 的最少操作次数。
示例 1:输入:3
输出:3
解释:
最初, 只有一个字符 'A'。
第 1 步, 使用 Copy All 操作。
第 2 步, 使用 Paste 操作来获得 'AA'。
第 3 步, 使用 Paste 操作来获得 'AAA'。
示例 2:输入:n = 1
输出:0
解题思路
每次将连续的字符串A分解,如果是二的倍数就是最优的,因为只需要复制粘贴两步,如果是3的倍数,就需要复制粘贴粘贴三步。因此,我们需要将字符串分解成为尽量大的几部分,所以我们可以从2,3,4…一直查找当前字符串能被分割为几块
代码
class Solution {public int minSteps(int n) {int res=0;while(n>1){for(int i=2;i<=n;i++)if(n%i==0){n/=i;res+=i;break;}}return res;}
}