leetCode刷题 13. 罗马数字转整数

目录

题目:

1. 思路

2. 解题方法

3. 复杂度

4. Code


题目:

罗马数字包含以下七种字符: 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 。

1. 思路

要将罗马数字转换为整数,可以通过遍历罗马数字字符串的每个字符,并根据规则逐个累加对应的数值。

2. 解题方法

  1. 初始化一个变量 result 用于存储转换后的整数值,初始值为 0。
  2. 遍历罗马数字字符串的每个字符:
    • 如果当前字符代表的数值比下一个字符代表的数值小,则将当前字符代表的数值加到 result 中,并将下一个字符代表的数值减去当前字符代表的数值,然后指针向后移动一位。
    • 否则,将当前字符代表的数值加到 result 中。
  3. 返回 result

3. 复杂度

  • 时间复杂度:O(n),其中 n 是罗马数字字符串的长度。
  • 空间复杂度:O(1),只需要常数级别的额外空间。

4. Code

class Solution {
    public int romanToInt(String s) {
        int result = 0; // 用于存储转换后的整数值
        
        // 枚举罗马数字字符串的每个字符
        for (int i = 0; i < s.length(); i++) {
            char currentChar = s.charAt(i);
            int currentValue = getValue(currentChar); // 获取当前字符代表的数值
            
            // 如果当前字符代表的数值比下一个字符代表的数值小,则将下一个字符代表的数值减去当前字符代表的数值
            if (i < s.length() - 1 && currentValue < getValue(s.charAt(i + 1))) {
                result -= currentValue;
            } else {
                result += currentValue;
            }
        }
        
        return result;
    }
    
    // 获取字符对应的数值
    private int getValue(char c) {
        switch (c) {
            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;
            default:
                return 0;
        }
    }
}

        这段代码通过遍历罗马数字字符串的每个字符,并根据规则逐个累加对应的数值,实现了将罗马数字转换为整数的功能。

欢迎大家后台联系讨论。

(一份Java面试宝典,有兴趣的读者姥爷可以私信我领取!!!免费滴)

图片

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 多种字符串处理函数介绍

Python 提供了丰富的字符串处理函数&#xff0c;用于执行各种字符串操作&#xff0c;如查找、替换、截取、转换等。以下是一些常用的 Python 字符串处理函数及其用法&#xff1a; 字符串长度和大小写转换 1. **len()**&#xff1a;返回字符串的长度。 2. **upper()**&#xff1…

如何区分工业以太网交换机和常规以太网交换机

工业以太网交换机和常规以太网交换机乍一看似乎很相似&#xff0c;但两者之间存在着一些关键区别。在本文中&#xff0c;我们将阐明这些差异&#xff0c;并为您提供一些快速区分两者的提示。 工业以太网交换机与常规以太网交换机的比较 工业以太网交换机和常规以太网交换机都…

[ai笔记15] openAI官方提示词工程文档(图文重排版本)

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第15篇分享&#xff01; 最近在学习prompt提示词技巧&#xff0c;一番研究发现其实提示词的技巧并不是限定死的&#xff0c;所谓技巧和心法更像是教导我们如何更清晰、更结构化的大模型聊天工具进行沟通…

SpringBoot +WebSocket应用

我们今天不研究原理&#xff0c;只看应用。 什么是WebSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455&#xff0c;并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数…

Redis-复制功能

0 序言 复制功能是Redis提供的多机功能中最基础的一个&#xff0c;这个功能是通过主从复制&#xff08;master-slave replication&#xff09;模式实现的&#xff0c;它允许用户为存储着目标数据库的服务器创建出多个拥有相同数据库副本的服务器&#xff0c;其中存储目标数据库…

ES6:箭头函数中的this指向问题

普通函数中的this指向函数的调用者 例子&#xff1a; 黑马程序员的说法&#xff1a;箭头函数不会创建自己的this&#xff0c;它只会从自己的作用域链的上一层沿用this 尚硅谷的说法&#xff1a;this始终指向函数声明时所在作用域下的this的值 通俗理解就是箭头函数中找this&…

c#简易学生管理系统

https://pan.baidu.com/s/1kCPvWg8P5hvlf26nGf2vxg?pwdya45 ya45

中国钛合金自行车出口海外营销策略-大舍传媒

中国是世界上自行车产量最大的国家之一&#xff0c;而如今&#xff0c;它也在自行车制造领域迈出了一大步。Titan Super Bond与Bright Laser Technologies (BLT)合作&#xff0c;成功开发了中国和亚洲首款全3D打印钛合金自行车车架。 这款创新的自行车车架采用了BLT-A320机器&a…

国产三维声纳

最近几天后台有人问三维声纳的事情。目前市面上三维声纳用得比较多的是Coda Octopus的Echoscope系列产品&#xff0c;Echoscope系列已经从第3代4D版本发展到第4代PIPE版本&#xff08;包含5D和6D&#xff09;&#xff0c;见下图。从它的介绍来看&#xff0c;3D是指采集三维立体…

PHP 生成图片

1.先确认是否有GD库 echo phpinfo(); // 创建一个真彩色图像 $image imagecreatetruecolor(120, 50);// 分配颜色 $bgColor imagecolorallocate($image, 255, 255, 255); // 白色背景 $textColor imagecolorallocate($image, 230, 230, 230); // 黑色文字// 填充背景 image…

Python数据分析-Numpy2

1.numpy读取数据 CSV:Comma-SeparatedValue,逗号分隔值文件 显示&#xff1a;表格状态 源文件&#xff1a;换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录 由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经…

浅谈C++的浅拷贝和深拷贝问题

今天我们来谈谈C的浅拷贝和深拷贝问题&#xff0c;这里先上定义&#xff0c;可以直接浏览下面的表格&#xff0c;比较直观&#x1f60a;&#x1f60a;&#x1f60a; 。在C中&#xff0c;浅拷贝和深拷贝是两种对象复制的方式&#xff0c;其中&#x1f431;浅拷贝&#xff08;Sha…

最近很火的“30秒展现女孩的一生”AI视频制作全流程

最近很火的AI视频&#xff0c;30秒展现一个人的一生&#xff0c;我们来看一下制作流程 包含以下知识点 安装ComfyUI AnimeDiff插件使用Prompt travel描述视频画面 加载工作流文件 在BatchPromptSchedule这个节点里描述出画面的内容&#xff0c;前面的数字代表对应的帧数 &q…

损失函数和反向传播

1. 损失函数的基础 import torch from torch.nn import L1Loss from torch import nninputs torch.tensor([1, 2, 3], dtypetorch.float32) targets torch.tensor([1, 2, 5], dtypetorch.float32)inputs torch.reshape(inputs, (1, 1, 1, 3)) targets torch.reshape(targe…

[已解决]安装CUDA失败报错(附万能解决办法)

[已解决]安装CUDA失败报错(附万能解决办法) &#xff08;Tips&#xff1a;赶时间直接看万能法2&#xff09; 经过长时间的尝试和研究&#xff0c;我终于解决了安装CUDA失败报错的问题。在这里&#xff0c;我将记录下我遇到的问题以及解决办法&#xff0c;希望对其他小白们有所帮…

关于PolarDB粗浅认识

PolarDB简介 目前&#xff08;20240314&#xff09;&#xff0c;PolarDB有两个版本&#xff1a; PolarDB-PG PolarDB PostgreSQL 版&#xff08;PolarDB for PostgreSQL&#xff0c;简称“PolarDB-PG”&#xff09;是阿里云自主研发的云原生关系型数据库产品&#xff0c;100%…

el-dialog弹框遮罩层问题

先看一下出现的bug&#xff0c;点击按钮出现弹框的时候&#xff0c;遮罩层出现在弹框上层&#xff0c;不知道是那个同事写的全局样式影响的&#xff0c;这个时候我们需要在el-dialog标签上添加一个属性就行 :modal-append-to-body“false” 下图是出现的问题&#xff0c;遮罩层…

什么是 HTTPS?它是如何解决安全性问题的?

什么是 HTTPS&#xff1f; HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是一种安全的通信协议&#xff0c;用于在计算机网络上安全地传输超文本&#xff08;如网页、图像、视频等&#xff09;和其他数据。它是 HTTP 协议的安全版本&#xff0c;通过使用加…

【微服务学习笔记(一)】Nacos、Feign、Gateway基础使用

【微服务学习笔记&#xff08;一&#xff09;】Nacos、Feign、Gateway基础使用 总览Nacos安装配置Nacos注册中心服务多级存储模型负载均衡规则环境隔离 配置管理配置拉取配置热更新多服务共享配置 Feign远程调用配置性能优化Fegin使用 统一网关Gateway搭建网关路由断言工厂&…

扫雷小游戏制作教程:用HTML5和JavaScript打造经典游戏

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…