leetcode13. 罗马数字转整数,流程图带你遍历所有情况

news/2024/9/18 13:35:26/ 标签: 流程图, 数据结构, 算法, c++, 面试, leetcode

leetcode13__0">leetcode13. 罗马数字转整数

在这里插入图片描述
示例 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 。

在这里插入图片描述

目录

题目描述

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

算法分析

这个问题可以通过遍历罗马数字字符串并解析每个字符来解决。罗马数字由特定的字符表示,每个字符都有其对应的整数值。在解析时,我们需要考虑一些特殊情况,比如某些字符组合(如IV, IX, XL, XC, CD, CM)表示的整数值与单个字符的组合不同。

算法步骤

  1. 初始化一个变量 res 用于存储结果,并将其设置为 0。
  2. 遍历罗马数字字符串 s
  3. 对于每个字符,根据其值和其后的字符,更新 res
  4. 考虑特殊情况,如IV, IX等,并正确处理。
  5. 返回最终结果 res

算法流程

字符为I
下一个字符为V
下一个字符为X
其他情况
字符为X
下一个字符为L
下一个字符为C
其他情况
字符为C
下一个字符为D
下一个字符为M
其他情况
字符为V
字符为L
字符为D
字符为M
还有更多字符
没有更多字符
开始
读取字符串s的第一个字符
检查下一个字符
结果加4
跳过下一个字符
结果加9
跳过下一个字符
结果加1
检查下一个字符
结果加40
跳过下一个字符
结果加90
跳过下一个字符
结果加10
检查下一个字符
结果加400
跳过下一个字符
结果加900
跳过下一个字符
结果加100
结果加5
结果加50
结果加500
结果加1000
读取下一个字符
结束

具体代码

class Solution {
public:int romanToInt(string s) {int n=s.size();int res=0;for(int i=0;i<n;i++){if(s[i]=='I'){if(s[i+1]=='V'){res+=4;i++;}else if(s[i+1]=='X'){res+=9;i++;}else{res+=1;}}else if(s[i]=='X'){if(s[i+1]=='L'){res+=40;i++;}else if(s[i+1]=='C'){res+=90;i++;}else{res+=10;}}else if(s[i]=='C'){if(s[i+1]=='D'){res+=400;i++;}else if(s[i+1]=='M'){res+=900;i++;}else{res+=100;}}else {if(s[i]=='V'){res+=5;}else if(s[i]=='L'){res+=50;}else if(s[i]=='D'){res+=500;}else if(s[i]=='M'){res+=1000;}}}return res;}
};

算法分析

复杂度分析

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

易错点

  • 在处理特殊情况时,确保正确地识别和处理它们。
  • 在更新结果时,确保正确地计算整数值。

注意事项

  • 确保在遍历字符串时不要超出字符串的边界。
  • 在处理字符串元素时,确保不会转换错误。

相似题目

题目链接
罗马数字转整数https://leetcode.com/problems/roman-to-integer/
整数转罗马数字https://leetcode.com/problems/integer-to-roman/
反转字符串https://leetcode.com/problems/reverse-string/
字符串转换整数https://leetcode.com/problems/string-to-integer-atoi/

http://www.ppmy.cn/news/1512151.html

相关文章

C++第三十七弹---深入理解红黑树:旋转、着色与性质维护

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1 红黑树 1.1 红黑树的概念 1.2 红黑树的性质 1.3 红黑树节点的定义 1.4 红黑树结构 1.5 红黑树的插入操作 1.6 红黑树的验证 1.7 红黑树与…

pdf查看密码

pdf有两种密码方式&#xff0c;一种是打开后进入文件内容页面后需要密码才能进行修改等操作&#xff0c;网上有很多方式进行移除密码操作&#xff0c;第二种是打开就需要密码&#xff0c;我这里简单记录一个暴力破解的方式&#xff0c;仅供参考 import PyPDF2 import itertools…

Windows系统命令

Windows系统命令 Windows 系统中的命令行工具是指令式编程语言&#xff0c;可以用来执行各种任务、管理文件和目录、监控系统状态等。下面是一个 Windows 命令应用实例&#xff1a; 1. 文件操作 cd&#xff1a;用于改变当前目录。例如&#xff0c;cd Documents 将当前目录更…

那傻比的pygame初步代码总结

import sys import pygame class Settings():def __init__(self):self.screen_width1600self.screen_height900self.bg_color(240,240,240)def run_game():#初始化游戏&#xff0c;建立屏幕对象pygame.init()#使用setting类ai_settingsSettings()screenpygame.display.set_mode…

C#:通用方法总结—第16集

大家好&#xff0c;今天继续介绍我们的通用方法系列。 下面是今天要介绍的通用方法&#xff1a; &#xff08;1&#xff09;这个通用方法为将TaggedObject转换为Face Public void ConvertTag() { TaggedObject[] GetSelectedObjects face_select0.GetSelectedObjects();…

鸿蒙内核源码分析——(自旋锁篇)

本篇说清楚自旋锁 读本篇之前建议先读系列篇 进程/线程篇. 内核中哪些地方会用到自旋锁?看图: 概述 自旋锁顾名思义&#xff0c;是一把自动旋转的锁&#xff0c;这很像厕所里的锁&#xff0c;进入前标记是绿色可用的&#xff0c;进入格子间后&#xff0c;手一带&#xff0c…

vue使用axios请求后端数据

前后端分离项目的基础&#xff1a; 前后端跨域访问 vite.config.js中加入 // 1.为什么要跨域 //因为浏览器的同源策略,不同站点之间访问需要跨域 //实现跨域的方式&#xff1a;server: {proxy: {// 假设要跨域访问的后端 API 地址以 /api 开头/api: { //表示拦截以/api开头的…

记录git push时的报错以及解决方案

报错信息如下 fatal: Unpack error, check server log error: remote unpack failed: error Missing tree xxxxxx(<版本号>) To gerrit:xxx/xxx/xxxxxx.git原因&#xff1a;远程已经有很多个分支合入 解决方案&#xff1a;提交的时候&#xff0c;加入一个参数 --no-thin…

编程中数据字典介绍

目录 第一章、快速了解数据字典1.1&#xff09;数据字典介绍1.2&#xff09;主动数据字典1.2.1&#xff09;主动数据字典对表字段的描述1.2.2&#xff09;主动数据字典对表索引的描述1.2.3&#xff09;主动数据字典对表外键的描述1.3&#xff09;被动数据字典1.4&#xff09;数…

vue3结合海康WEB开发包,开发web在线预览视频

我们这里选择V3.3版本 文档地址&#xff1a;https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type20&id4c945d18fa5f49638ce517ec32e24e24 解压过后&#xff0c;会有三个文件夹 在docs中&#xff0c;点开Demo使用说明&#xff0c;按照流程先测试下&…

湖北师范大学-Python程序设计-3.1 中国古代数学问题(project)

第1关&#xff1a;鸡兔同笼 编程要求 根据提示&#xff0c;在右侧编辑区补充代码&#xff0c;计算并输出鸡和兔子的个数。 测试说明 平台会对你编写的代码进行测试&#xff1a; 测试输入&#xff1a; 输入为一行&#xff0c;以空格分隔的两个整数 h f&#xff0c;分别代表鸡…

代码随想录Day35打卡--动态规划之01背包问题

目录 一、做题心得 二、题目与题解 题目一&#xff1a;01背包问题&#xff08;模板题&#xff09; 题目链接 题解1&#xff1a;动态规划--二维dp 题解2&#xff1a;动态规划--一维dp 题目二&#xff1a;46. 携带研究材料 题目链接 题解1&#xff1a;动态规划--二维dp …

Java爬虫中的数据清洗:去除无效信息的技巧

在互联网信息爆炸的时代&#xff0c;数据的获取变得异常容易&#xff0c;但随之而来的是数据质量的问题。对于Java爬虫开发者来说&#xff0c;如何从海量的网页数据中清洗出有价值的信息&#xff0c;是一个既基础又关键的步骤。本文将介绍Java爬虫中数据清洗的重要性&#xff0…

2024.08.09校招 实习 内推 面经

地/球&#x1f30d; &#xff1a; neituijunsir 交* 流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 顺丰科技 2025届秋季校园招聘技术专场正式启动&#xff08;内推&#xff09; 校招 | 顺丰科技 2025届秋季校园招聘技术专场正式启动&#xff08;内推&#xff09; …

8.14 day bug

bug1 好家伙&#xff0c;折腾一个小时没通过&#xff0c;原来是代码写多了 // 定义初始状态 const defaultState {login: false };// 定义 reducer const reducer (state defaultState, action) > {if (action.typeLOGIN) {// 当接收到 LOGIN action 时&#xff0c;更新…

STM32 —— TIM(基本定时器)详解_stm32的tim

STM32 —— TIM&#xff08;基本定时器&#xff09;详解_stm32的tim 一、定时器简介 STM32F1 系列中&#xff0c;除了互联型的产品&#xff0c;共有 8 个定时器&#xff0c;分为基本定时器&#xff0c;通用定时器和高级定时器。基本定时器 TIM6 和 TIM7 是一个 16 位的只能向…

单一职责原则在微服务中的应用:服务分解与职责明确

单一职责原则在微服务中的应用&#xff1a;服务分解与职责明确 引言 单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09;是面向对象编程中的一个重要设计原则&#xff0c;强调每个模块或类应当仅负责一个职责或功能。随着软件系统的复杂性不断增加&a…

白骑士的C#教学实战项目篇 4.1 控制台应用程序

系列目录 上一篇&#xff1a;白骑士的C#教学高级篇 3.4 数据库编程 在这一部分&#xff0c;我们将把之前学习的理论知识付诸实践&#xff0c;通过实际项目来巩固和加深对 C# 编程的理解。实战项目不仅能帮助您提高编程技能&#xff0c;还能为您提供宝贵的实践经验。我们将从开…

Vue小玩意儿:vue3+express.js实现大文件分片上传

vue3: <template><div><h1>大文件分片上传</h1><input type"file" change"onFileChange"/><div v-if"progress > 0">上传进度: {{ progress }}%</div></div> </template><script …

2023华为od机试C卷【转盘寿司】C 实现 单调栈

#include <stdio.h> #include <stdlib.h>/*单调栈 旋转寿司3 15 6 14 3 21 9 17*/ int main() {int i 0;int len 0;int data 0;int nums[501];char c ;while(scanf("%d",&nums[i]) 1){i;len;c getchar();if(c \n)break;}int *out NULL;int *s…