zoukankan      html  css  js  c++  java
  • 650. 只有两个键的键盘

    最初在一个记事本上只有一个字符 '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做整除运算。若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 }
  • 相关阅读:
    python处理url中的中文编码,以及其他编码问题
    深度学习与神经网络
    Windows下为64位的python3.4.3安装numpy
    TOP 10开源的推荐系统简介
    遗传算法
    java调用c++生成的动态和静态库时遇到的问题
    java程序(一)----HashMap同时获取键值
    Deep Learning In NLP 神经网络与词向量
    word2vec使用说明
    Spring入门_02_属性注入
  • 原文地址:https://www.cnblogs.com/yihangZhou/p/10087099.html
Copyright © 2011-2022 走看看