当前位置: 首页 > article >正文

【LeetCode】650. 只有两个键的键盘

650. 只有两个键的键盘(中等)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 思路

    • 不同于以往通过加减实现的动态规划,这里需要乘除法计算位置。因为粘贴操作是倍数增加,使一个一维数组 dp,其中位置 i 表示延展到长度 i 的最少操作次数。
    • 对于每个位置 j ,如果 j 可以被 i 整除,那么长度 i 就可以由长度 j 得到,其操作次数等价于把一个长度为 1 的 A 延展到长度为 i/j ,因此递推公式为:dp[i] = dp[j] + dp[i/j]; 。比如 i = 10 ,可以在 i=5 的时候,选择复制全部字符并粘贴,就扩展为 10 个 A。
  2. 代码

    class Solution {
    public:
        int minSteps(int n) {
            vector<int> dp(n+1, 0);
            for(int i=2; i<=n; ++i){
                dp[i] = i;
                for(int j=2; j*j<=i; ++j){
                    if(i % j == 0){
                        dp[i] = dp[j] + dp[i/j]; 
                        break;
                    }
                }
            }
            return dp[n];
        }
    };
    
  3. 收获

    • 理解起来有点难,自己跟着代码算一下比较好理解。
    • 我自己模拟的时候,计算错了,忘记复制全部字符,而我每次复制的字符都是之前复制的两倍(即 2 - 4 - 8 - …)。

http://www.kler.cn/a/14784.html

相关文章:

  • 软考高项论文常见问题如何自查?
  • mybatis粗心使用导致内存溢出
  • Android音视频开发-OpenGL ES正交投影实现方法
  • C#【必备技能篇】制作NuGet程序包,并发布到NuGet官网
  • Java -- IO流
  • 【AI】Python 脚本转换为可执行文件 EXE
  • 04_并发容器类
  • Linux进程通信:无名管道
  • 低代码开发重要工具:jvs-logic(逻辑引擎)能力扩展及代码集成
  • 经常打电话的人用什么耳机好?通话质量好的蓝牙耳机推荐
  • Doris(16):物化视图
  • IU5180C升降压充电芯片特点及应用
  • 【LeetCode】987.二叉树的垂序遍历
  • chatGPT电脑端怎么安装-chatgpt国内怎么用
  • 【LeetCode】剑指 Offer 67. 把字符串转换成整数 p318 -- Java Version
  • 指定GPU运行python程序
  • 若[x]补 =1,x1x2x3x4x5x6,其中x取0或1,若要x>-32,应当满足
  • 4月24日作业
  • Hadoop 生态圈及核心组件简介Hadoop|MapRedece|Yarn
  • #cordova添加plugin的方法#