力扣面试经典算法150题:整数转罗马数字

整数转罗马数字

今天的题目是力扣面试经典150题中的数组的中等难度题: 整数转罗马数字。

题目链接:https://leetcode.cn/problems/integer-to-roman/description/?envType=study-plan-v2&envId=top-interview-150

题目描述

七个不同的符号代表罗马数字,其值如下:

符号
I1
V5
X10
L50
C100
D500
M1000

罗马数字是通过添加从最高到最低的小数位值的转换而形成的。

将小数位值转换为罗马数字有以下规则:

  • 如果该值不是以 4 或 9 开头,请选择可以从输入中减去的最大值的符号,将该符号附加到结果,减去其值,然后将其余部分转换为罗马数字。
  • 如果该值以 4 或 9 开头,使用 减法形式,表示从以下符号中减去一个符号,例如 4 是 5 (V) 减 1 (I): IV ,9 是 10 (X) 减 1 (I):IX。仅使用以下减法形式:4 (IV),9 (IX),40 (XL),90 (XC),400 (CD) 和 900 (CM)。
  • 只有 10 的次方(I, X, C, M)最多可以连续附加 3 次以代表 10 的倍数。你不能多次附加 5 (V),50 (L) 或 500 (D)。如果需要将符号附加4次,请使用 减法形式。

给定一个整数,将其转换为罗马数字。

  • 示例 1:

    • 输入:
      num = 3749

    • 输出:
      “MMMDCCXLIX”

    • 解释:

      3000 = MMM 由于 1000 (M) + 1000 (M) + 1000 (M)
      700 = DCC 由于 500 (D) + 100 © + 100 ©
      40 = XL 由于 50 (L) 减 10 (X)
      9 = IX 由于 10 (X) 减 1 (I)

      注意:49 不是 50 (L) 减 1 (I) 因为转换是基于小数位

  • 示例 2:

    • 输入:
      num = 58

    • 输出:
      “LVIII”

    • 解释:

      50 = L
      8 = VIII

  • 示例 3:

    • 输入:
      num = 1994

    • 输出:
      “MCMXCIV”

    • 解释:

      1000 = M
      900 = CM
      90 = XC
      4 = IV

题目分析

主要搞懂罗马字符和数字的转换逻辑就行。

前面做过简单题罗马字符转数字,这里反过来了,可以看看当时的题目是怎么解答的,帮助理解一下两者的转换。

传送门:罗马字符转数字

解题思路

罗马数字转换,我就想到一个暴力破解,无非就是暴力破解的时候转换值使用一点小技巧。

那么直接看代码吧。

实际算法代码

以下是暴力解答的代码实现:

public class IntegerToRoman {public static void main(String[] args) {IntegerToRoman solution = new IntegerToRoman();System.out.println(solution.intToRoman(3));       // 输出: "III"System.out.println(solution.intToRoman(4));       // 输出: "IV"System.out.println(solution.intToRoman(9));       // 输出: "IX"System.out.println(solution.intToRoman(94));       // 输出: "IX"System.out.println(solution.intToRoman(222));       // 输出: "IX"System.out.println(solution.intToRoman(666));       // 输出: "IX"}public String intToRoman(int num) {// 构建映射表int[][] map = {{1000, 500, 100, 50, 10, 5, 1},{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}};String[][] romanMap = {{"M", "D", "C", "L", "X", "V", "I"},{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}};StringBuilder sb = new StringBuilder();// 处理千位int thousands = num / 1000;while (thousands > 0) {sb.append(romanMap[0][0]);thousands--;}// 处理百位int hundreds = (num % 1000) / 100;while (hundreds > 0) {sb.append(romanMap[1][2]);hundreds--;}// 处理十位int tens = (num % 100) / 10;while (tens > 0) {sb.append(romanMap[1][4]);tens--;}// 处理个位int ones = num % 10;while (ones > 0) {sb.append(romanMap[1][6]);ones--;}// 优化特殊组合sb = optimize(sb);return sb.toString();}private StringBuilder optimize(StringBuilder sb) {// 优化特殊组合String s = sb.toString();StringBuilder optimized = new StringBuilder();// 处理千位optimized.append(s.replaceAll("DCCCC", "CM").replaceAll("CCCC", "CD"));// 处理百位optimized.append(s.replaceAll("LXXXX", "XC").replaceAll("XXXX", "XL"));// 处理十位optimized.append(s.replaceAll("VIIII", "IX").replaceAll("IIII", "IV"));return optimized;}}

结果

执行程序,符合要求
在这里插入图片描述
提交力扣,通过测试:
在这里插入图片描述

总结

今天的题目就是暴力解答,主要还是逻辑问题。做了这么久题目肯定没问题,不行就参考一下字符转数字,中间有一点共通之处帮助更好的理解两者间的转换。

加油!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SprinBoot+Vue餐厅点餐系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

stm32智能颜色送餐小车(ESP8266WIFI模块、APP制作、物联网模型建立、MQTTFX)

大家好啊,我是情谊,今天我们来介绍一下我最近设计的stm32产品,我们在今年七月份的时候参加了光电设计大赛,我们小队使用的就是stm32的智能送餐小车,虽然止步于省赛,但是还是一次成长的经验吧,那…

java在项目中实现excel导入导出

一、初识EasyExcel* 1. Apache POI 先说POI,有过报表导入导出经验的同学,应该听过或者使用。 Apache POI是Apache软件基金会的开源函式库,提供跨平台的Java API实现Microsoft Office格式档案读写。但是存在如下一些问题: 1.1 …

SpringBoot 项目——抽奖系统

本项目主要实现的功能是:主要服务于管理员用户,其可圈选奖品,人员来创建抽奖活动,并进行在线抽奖,并可通过短信或邮件的方式通知中奖者,同时普通用户可查看已结束的抽奖活动的中奖结果; 一、项…

TESSY创建单元测试或集成测试工程

我们以tessy5.1 IDE为例,给大家展示工程的创建过程。 1、打开TESSY5.1软件后,会弹出: 2、点击NEW Project后,会弹出: 3、接下来,就可以打开刚创建的工程: 4、进入到TESSY的主界面后&#xff0c…

Python办公自动化 获取文本数据 支持多种类型文件

学好办公自动化,走遍天下都不怕!! 前面我们已经学习了,如何用python的下载安装以及入门基础知识,并且也知道如何使用python自动处理Excel文件数据、如何批量生成Word文件、如何对数据分析后生成洞察报告、如何用python实现自动发送…

React中实现antd自定义图标,鼠标悬浮变色

借助 antd 的 tooltip 组件来实现 hover 时变色的效果 1.新建组件 自定义图标一般在iconfont上面获取,复制下来的svg代码,切记要删除 fill 属性后添加到组件中 import { Tooltip } from "antd"; import React from "react";const …

webpack4手动搭建Vue项目

小满视频 很多解释使用通义灵码搜的,通义灵码的搜索结果也是有错误的全程使用pnpm包管理工具,和npm的用法基本一样 学习总结 1. 多看看webpack官网 2. webpack的作用:配置一堆东西,达到运行程序的目的 3. 无论什么东西都转成js,…

理解数据库系统的内部结构

数据库系统在我们的数字世界中扮演着关键角色。本文将介绍数据库系统的内部结构,帮助初学者了解其基本概念。 数据库系统的三级模式 数据库系统内部采用三级模式二级映像结构,包括外模式、模式和内模式。这种结构确保了数据的逻辑独立性和物理独立性。…

如何在Android项目中进行性能优化分析?

引言 在开发过程中,性能优化是一个重要的话题。用户对于应用的性能有着非常高的期望:快速启动、流畅的操作体验、低内存消耗等。那么,作为开发者,我们如何才能在项目中进行性能优化分析呢?今天就来和大家聊聊这个话题…

Linux常见基础命令

Linux基础 初级学习阶段需要了解的知识一、Linux基础命令查阅命令帮助信息1.man2.help Linux命令的基本实用目录操作文件内容操作查看某文件下的用户操作日志压缩和解压缩sudo用户权限操作用户权限操作TOP文件安装 上一篇 VMware安装linux环境 初级学习阶段需要了解的知识 1.…

什么是 AWS CloudWatch?

AWS CloudWatch 是 AWS 提供的一项全面的监控和可观测性服务,使用户能够收集和可视化指标、日志和事件;设置警报;并根据预定义的条件自动执行操作。CloudWatch 提供对 AWS 资源和应用程序的运行状况、性能和运行状态的深入了解,使…

autoware整体架构的分析

autoware framework sensinglidar driver(lidar驱动)PointCloud Preprocessing(点云预处理)Detection(检测)GNSS (全球导航卫星系统)IMU (惯性测量单元) Localization(定位)Pose Ini…

#Datawhale X 李宏毅苹果书 AI夏令营#1.2了解线性模型

1.2线性模型 什么是线性模型? 初始模型:, 其中y表示观看人数,x1表示前一天的观看人数,这个模型就是在用前一天的观看人数来预测当前的观看人数。 模型改进: 然而真实的数据是有周期性的,每隔7天&#…

这本大模型书一定要读!李开复、周鸿祎都强烈推荐的《实战AI大模型》(附PDF)

《实战AI大模型》是一本旨在填补人工智能(AI)领域(特别是AI大模型)理论与实践之间鸿沟的实用手册。书中介绍了AI大模型的基础知识和关键技术,如Transformer、BERT、ALBERT、T5、GPT系列、InstructGPT、ChatGPT、GPT 4、…

无人机之云台的作用

无人机云台在无人机技术中扮演着至关重要的角色,其作用主要体现在以下几个方面: 一、 确保拍摄稳定性 防抖动:无人机在飞行过程中,尤其是在复杂环境下,如遇到风力干扰或进行高速飞行时,机身容易产生震动和…

Prometheus+Grafana的安装和入门

概念 什么是Prometheus? Prometheus受启发于Google的Brogmon监控系统(相似kubernetes是从Brog系统演变而来), 从2012年开始由google工程师Soundclouds使用Go语言开发的开源监控报警系统和时序列数据库(TSDB)。,并且与2015年早起…

【Linux —— POSIX信号量 - 基于环形队列的生产消费模型】

Linux —— POSIX信号量 - 基于环形队列的生产消费模型 POSIX信号量信号量的概念POSIX信号量的类型信号量的操作 POSIX信号量函数基于环形队列的生产消费模型设计思路同步和安全性代码 POSIX信号量 信号量的概念 POSIX信号量是一种用于进程和线程之间同步的机制,主…

【netty系列-08】深入Netty组件底层原理和基本实现

Netty系列整体栏目 内容链接地址【一】深入理解网络通信基本原理和tcp/ip协议https://zhenghuisheng.blog.csdn.net/article/details/136359640【二】深入理解Socket本质和BIOhttps://zhenghuisheng.blog.csdn.net/article/details/136549478【三】深入理解NIO的基本原理和底层…

数据结构(邓俊辉)学习笔记】串 16——Karp-Rabin算法:串即是数

文章目录 1. 化串为数2. 凡物皆数3. 亦是数 1. 化串为数 接下来的这节,我们再来讨论一种十分另类的串匹配算法,也就是所谓的 Karp-Rabin 算法。回顾此前所介绍的几种串匹配算法,我们所面临的难题是一样的。也就是说在这里,我们每次…