动态规划-650. 2 Keys Keyboard

来源:互联网 发布:陕西省大数据集团副总 编辑:程序博客网 时间:2024/06/11 09:24

题目

Initially on a notepad only one character 'A' is present. You can perform two operations on this notepad for each step:

  1. Copy All: You can copy all the characters present on the notepad (partial copy is not allowed).
  2. Paste: You can paste the characters which are copied last time.

Given a number n. You have to get exactly n 'A' on the notepad by performing the minimum number of steps permitted. Output the minimum number of steps to get n 'A'.

Example 1:

Input: 3Output: 3Explanation:Intitally, we have one character 'A'.In step 1, we use Copy All operation.In step 2, we use Paste operation to get 'AA'.In step 3, we use Paste operation to get 'AAA'.

题意解读:给定一个数字n,你必须在notepad上得到精确的n个A,你可以采取复制所有和粘贴两个操作。notepad上初始只有1个A.求最少需要多少个操作

//定义dp[i] 表示得到i个A所需要的最少操作数 class Solution {    public int minSteps(int n) {        int[] dp = new int[n+1];        //n<2返回0        if(n < 2) return 0;        dp[2] = 2;//copy one and paste        for (int i = 3; i <= n; i++){            for(int j = i-1 ; j>=2; j--){//j代表依次复制的个数,这里要倒着走,因为优先考虑一次复制多的                if(i%j == 0){                    dp[i] = dp[j] + 1 + (i-j)/j;//copy one  and paste (j-i)/j                    break;//一定要跳出,否则最优值会被覆盖                }                else                    dp[i] = i;            }        }         return dp[n];    }}


原创粉丝点击