650. 只有两个键的键盘
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了650. 只有两个键的键盘相关的知识,希望对你有一定的参考价值。
最初在一个记事本上只有一个字符 ‘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做整除运算。若n = a * b;则有状态转移方程dp[n] = dp[max(a,b)] + min(a,b);其中dp[max(a,b)]表示组合成max(a,b)所需要的操作数,min(a,b)表示需要进行的操作数(复制一次 + 粘贴min(a,b)-1次)
1 class Solution { 2 public int minSteps(int n) { 3 if(n==1)return 0; 4 int sum=0; 5 int[] dp=new int[n+1]; 6 for(int num=1;num<=n;num++){ 7 dp[num]=num; 8 int i=(int)(Math.sqrt(num)); 9 for(;i>=1;i--){ 10 if(num%i==0){ 11 int temp=dp[num/i]+i; 12 if(temp<dp[num]){ 13 dp[num]=temp; 14 } 15 } 16 } 17 } 18 return dp[n]; 19 20 } 21 }
以上是关于650. 只有两个键的键盘的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 650. 2 Keys Keyboard 只有两个键的键盘(中等)