Leetcode--13

13. 罗马数字转整数

罗马数字包含以下七种字符: I, V, X, LCD 和 M

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

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

示例 1:

输入: s = "III"
输出: 3

示例 2:

输入: s = "IV"
输出: 4

示例 3:

输入: s = "IX"
输出: 9

示例 4:

输入: s = "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.

示例 5:

输入: s = "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

提示:

  • 1 <= s.length <= 15
  • s 仅含字符 ('I', 'V', 'X', 'L', 'C', 'D', 'M')
  • 题目数据保证 s 是一个有效的罗马数字,且表示整数在范围 [1, 3999] 内
  • 题目所给测试用例皆符合罗马数字书写规则,不会出现跨位等情况。
  • IL 和 IM 这样的例子并不符合题目要求,49 应该写作 XLIX,999 应该写作 CMXCIX 。
  • 关于罗马数字的详尽书写规则,可以参考 罗马数字 - Mathematics 。

先看我的代码:

class Solution {
public:int romanToInt(string s) {int len=s.size();int num=0;for(int i=0;i<len-1;i++){if(s[i]=='I'){if(s[i+1]=='V'||s[i+1]=='X')num-=1;elsenum+=1;}else if(s[i]=='V')num+=5;else if(s[i]=='X'){if(s[i+1]=='L'||s[i+1]=='C')num-=10;elsenum+=10;}else if(s[i]=='L')num+=50;else if(s[i]=='C'){if(s[i+1]=='D'||s[i+1]=='M')num-=100;else num+=100;}else if(s[i]=='D')num+=500;else if(s[i]=='M')num+=1000;  }switch(s[len-1]){case 'I':num+=1;break;case 'V':num+=5;break;case 'X':num+=10;break;case 'L':num+=50;break;case 'C':num+=100;break;case 'D':num+=500;break;case 'M':num+=1000;break;}return num;}
};

虽然有点繁琐,但是不管怎么说,也是能跑出来的。下面来看官方解答:

class Solution {public int romanToInt(String s) {s = s.replace("IV","a");s = s.replace("IX","b");s = s.replace("XL","c");s = s.replace("XC","d");s = s.replace("CD","e");s = s.replace("CM","f");int result = 0;for (int i=0; i<s.length(); i++) {result += which(s.charAt(i));}return result;}public int which(char ch) {switch(ch) {case 'I': return 1;case 'V': return 5;case 'X': return 10;case 'L': return 50;case 'C': return 100;case 'D': return 500;case 'M': return 1000;case 'a': return 4;case 'b': return 9;case 'c': return 40;case 'd': return 90;case 'e': return 400;case 'f': return 900;}return 0;}
}

显然,官方的代码很有美感。 

 

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

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

相关文章

基于SpringBoot框架的校园二手交易系统的设计与实现(全套资料)

一、系统架构 前端&#xff1a;vue | element-plus 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk17 | mysql | maven | node | redis 二、代码及数据库 三、功能介绍 01. 后台管理-登录页 02. 后台管理-首页 03. 后台管理-基础模块-用户管理 04. 后…

67: 学生成绩管理(python)

收藏 难度&#xff1a;简单 标签&#xff1a;暂无标签 题目描述 有N个学生&#xff0c;每个学生的数据包括学号、班级、姓名、三门课成绩。从键盘输入N 个 学生数据&#xff0c;要求打印出每个学生三门课的平均成绩&#xff0c;以及平均分最高分学生数据&#xff08;包括学…

Java项目:61 ssm基于java的健身房管理系统的设计与实现+vue

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 基于ssm Vue的健身房管理系统 角色:管理员、用户、教练、游客 管理员:管理员登录系统后&#xff0c;可以对个人中心、会员管理、器材管理、课程管理…

操作系统DC分析1

通过显示窗口过程来分析一下DC 要将内容显示在屏幕上&#xff0c;1、方法bios中断&#xff0c;2、写端口&#xff0c;3、写内存&#xff0c;其他&#xff08;暂时不知道&#xff09; 本次采用的写内存方法&#xff0c; 显卡有一个内存&#xff0c;只要将要显示的内容写入内存…

Conda 环境迁移

1. 进入需要迁移的环境&#xff1a; conda activate yolov8 2.打包迁移环境&#xff0c;注意安装打包库 pip install conda-packconda pack -n yolov83. 转移打包的环境包&#xff0c;放到anaconda/envs 下面, 在envs 下面新建环境文件夹&#xff0c;解压环境包到&#xff1…

JS核心知识点 - 赋值、浅拷贝、深拷贝。

一、理解基础数据类型和引用数据类型 基础数据类型&#xff1a; 字符串&#xff08;String&#xff09;&#xff1a;表示文本数据&#xff0c;使用引号括起来。数字&#xff08;Number&#xff09;&#xff1a;表示数值数据&#xff0c;包括整数和浮点数。布尔值&#xff08;Bo…

vulhub中Apache Shiro 认证绕过漏洞复现(CVE-2010-3863)

Apache Shiro是一款开源安全框架&#xff0c;提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用&#xff0c;同时也能提供健壮的安全性。 在Apache Shiro 1.1.0以前的版本中&#xff0c;shiro 进行权限验证前未对url 做标准化处理&#xff0c;攻击者可以构造/、//、…

[ Linux ] vim的使用(附:命令模式的常见命令列表)

1.下载安装 这里是在通过yum进行下载安装 yum install -y vim 2.了解 vim是一款编辑器&#xff0c;它具有多模式的特点 主要有&#xff1a;插入模式&#xff0c;命令模式&#xff0c;底行模式 3.使用 打开 vim 文件名 命令模式的常见命令列表 插入模式 按「 i 」切换…

A Survey on Multimodal Large Language Models

目录 1. Introduction2. 概述方法多模态指令调优 3.1.1 简介3.1.2 预备知识3.1.3 模态对齐3.1.4 数据3.1.5 模态桥接3.1.6 评估 3.2.多模态情境学习3.3.多模态思维链3.3.1 模态桥接3.3.2 学习范式3.3.3 链配置3.3.4 生成模式3.4.LLMs辅助视觉推理3.4.1 简介3.4.2 训练范式3.4.3…

医疗隔离电源系统在医院配电系统应用分析

【摘要】根据医疗场所分类说明医院尤其是 2 类 医疗场所的接地方案&#xff0c;分析医疗场所自动切断电源措 施&#xff0c;提出校验医疗 IT 系统配出回路长度&#xff1b;说明 RCD、RCM、IMD、IFLS 等的用途和范围&#xff1b;就应急医 院 2 类场所的配电方案进行探讨。 【关…

B005-springcloud alibaba 服务网关 Gateway

目录 网关简介Gateway简介Gateway快速入门基础版增强版简写版 Gateway概念及执行流程基本概念执行流程 断言Gateway内置路由断言内置路由断言工厂的使用 自定义路由断言工厂 过滤器过滤器简介局部过滤器内置局部过滤器自定义局部过滤器 全局过滤器内置全局过滤器自定义全局过滤…

【机器学习】详细解析Sklearn中的StandardScaler---原理、应用、源码与注意事项

【机器学习】详细解析Sklearn中的StandardScaler—原理、应用、源码与注意事项 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x…

用python写网络爬虫:3.urllib库进一步的使用方法

文章目录 异常处理URLErrorHTTPError设置超时时间 链接的解析、构造、合并urlparse方法urlsplit方法urljoin方法urlencode方法parse_qs方法quote方法 Robots 协议Robots 协议的结构解析协议 参考书籍 在上一篇文章&#xff1a;用python写网络爬虫&#xff1a;2.urllib库的基本用…

STM32中freertos任务不能调度的原因解决

本文是项目中的定位问题&#xff0c;如果定位到同样问题&#xff0c;可以按下面方法解决。 问题定位 这行assert代码主要判断系统中最大中断优先级数量是否等于内核中断优先级&#xff0c;实际意思就是要求内核中断优先级为系统最低优先级&#xff08;freertos中0为最高优先级…

2024/3/17 TCP的进程和线程通信,模拟面试总结

#include<myhead.h> #define SER_PORT 8888//服务器端口号 #define SER_IP "192.168.65.130"//服务器IP //定义向线程体提供参数的结构体 struct BufInfo {int newfd;struct sockaddr_in cin; }; //定义线程体函数 void *deal_cli_msg(void *arg) {//接受传过来…

初次文件包含漏洞

1.文件包含漏洞介绍 1.1.文件包含漏洞解释   文件包含漏洞就是使用函数去包含任意文件的时候&#xff0c;当包含的文件来源过滤不严谨的时候&#xff0c;当存在包含恶意文件后&#xff0c;就可以通过这个恶意的文件来达到相应的目的。 1.2.文件包含漏洞原理    其实原理就…

四、MySQL

MySQL MySQL1.初识网站2.安装MySQL2.1 下载&#xff08;最重要的一点是路径中不能有中文&#xff0c;哪怕是同级目录也不行&#xff09;2.2安装补丁2.3安装2.4创建配置文件2.5初始化 3.启动MySQL4.连接测试4.1 设置密码4.2 查看已有的文件夹&#xff08;数据库&#xff09;4.3 …

Linux怎么查看当前进程?怎么执行退出?怎么查看当前路径?

在Linux系统中&#xff0c;查看当前进程、执行退出和查看当前路径都可以通过命令行来完成。下面是具体的命令和它们的用法&#xff1a; 1. **查看当前进程**&#xff1a; 使用ps命令可以查看当前运行的进程。ps代表“process status”&#xff0c;它可以显示当前用户的进程…

计算机网络——物理层(信道复用技术)

计算机网络——物理层&#xff08;信道复用技术&#xff09; 信道复用技术频分多址与时分多址 频分复用 FDM (Frequency Division Multiplexing)时分复用 TDM (Time Division Multiplexing)统计时分复用 STDM (Statistic TDM)波分复用码分复用 我们今天接着来看信道复用技术&am…

用Excel就可以实现的生产绩效考核评定

从事生产管理数十载&#xff0c;在进行员工日常生产效率和综合考核的管理方面&#xff0c;积累了一些经验和注意事项。今天来和大家分享一下如何用Excel来搞定它吧&#xff01; 首先&#xff0c;Excel是一个强大的工具&#xff0c;可以帮助我们收集、分析和展示员工的生产数据…