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

【leetcode 详解】生成特殊数字的最少操作【中等】(C++思路精析)

 题目见下:

测试数据: 

解题思路笔记:

        最初拿到这道题是很蒙的,联想不到什么数据结构的模型(肯定是笔者积累太少了),甚至惯性地想怎么实现“删除数字”的操作:在原字符串中抽出一个字符然后将剩余数字按原顺序拼接?

         看着看着下面的测试数据,我突然意识到,能整除25的数确实很特殊,即若长度足够,则必然以【00,50, 25, 75】来结尾,这样一来,未知长度的字符串问题,就转化为了:专注于找可以放在结尾的两字符的问题。

        进一步观察题目要求可以发现,既然咱们要的就是 “最小删除个数” 这么个结果,中间过程怎么实现都行,也就是不必按题目表述的 “删除一个字符,检查是否可整除25” 介么生硬地来。这大概也是像笔者一样的编程初学者容易陷入的误区,实现过程的思路总是跟着题目叙述跑,但优质的(时空复杂度较低)的解法往往需要明确问题核心,创意性地从新的角度切入。

//更多创意性解法,这里推荐文章

PTA 7-4 列车调度(C/ C++ 一个数组就好啦!)-CSDN博客

最后,附上AC代码:

class Solution {
private:void Myfunc(string num, int cur0, char c1, char c2, int &re){int len = num.length();int help1=len, help2=len;while(1){if(help1 >= cur0 ) help1 = num.rfind(c1, help1-1);if(help2 >= cur0 ) help2 = num.rfind(c2, help2-1);if(help1 < cur0 && help2 < cur0) break;//说明:调试过程中发现,num.npos其实就等于 -1,可以进行整数比较}if(help1 == num.npos && help2 == num.npos){if(cur0 != num.npos && c1 == '0') re = len - 1;//只有当末尾数字为0时才进行这部操作} else{if(help1 != num.npos) re = min(re, len-2-help1);if(help2 != num.npos) re = min(re, len-2-help2);} }public:int minimumOperations(string num) {if(!num.compare("0")) return 0;//特殊情况处理int re = num.length();int cur0 = num.rfind('0'), cur5 = num.rfind('5');if(cur0 != num.npos){Myfunc(num, cur0, '0', '5', re);}if(cur5 != num.npos){Myfunc(num, cur5, '2', '7', re);}return re;}
};

~希望对你有启发~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C#中实现Web API的签名验证
  • 24种设计模式介绍与6大设计原则(电子版教程)
  • [Javascript】前端面试基础3【每日学习并更新10】
  • 【iOS】——Block循环引用
  • Java面试题基础
  • JAVA(SpringBoot)对接微信登录
  • docker compose build 怎么才能只构建其中一个服务的镜像
  • 基于微信小程序+SpringBoot+Vue的儿童预防接种预约系统(带1w+文档)
  • 夯实数字经济的“新基建”-基于大数据与区块链技术的新型基础设施
  • LangChain4j-RAG基础
  • Linux相关指令
  • Apache DolphinScheduler Worker Task执行原理解析
  • 校车购票小程序的设计
  • Perl脚本学习(一)-- 基础语法
  • 17 敏捷开发—Scrum(2)
  • Brief introduction of how to 'Call, Apply and Bind'
  • Hibernate【inverse和cascade属性】知识要点
  • Js基础知识(一) - 变量
  • Meteor的表单提交:Form
  • Nacos系列:Nacos的Java SDK使用
  • python_bomb----数据类型总结
  • select2 取值 遍历 设置默认值
  • 安卓应用性能调试和优化经验分享
  • 关于extract.autodesk.io的一些说明
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 今年的LC3大会没了?
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 最简单的无缝轮播
  • hi-nginx-1.3.4编译安装
  • # .NET Framework中使用命名管道进行进程间通信
  • ######## golang各章节终篇索引 ########
  • ###STL(标准模板库)
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #Lua:Lua调用C++生成的DLL库
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (03)光刻——半导体电路的绘制
  • (2020)Java后端开发----(面试题和笔试题)
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (Java入门)学生管理系统
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (八)Spring源码解析:Spring MVC
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)windows配置JDK环境
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (七)Java对象在Hibernate持久化层的状态
  • (四)鸿鹄云架构一服务注册中心
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET设计模式(2):单件模式(Singleton Pattern)