【Leetcode刷题】算法:罗马数字转整数

news2024/11/28 10:50:11

文章目录

  • 一、问题
  • 二、代码理解

一、问题

在这里插入图片描述

二、代码理解

class Solution:
    def romanToInt(self, s: str) -> int:
        answer=0
        length = len(s)
        d={'I':1,'V':5,'X':10, 'L':50,'C':100, 'D':500,'M':1000}
        for i in range(length-1):
            if d[s[i+1]]>d[s[i]]:
                answer=answer-d[s[i]]
            else:
                answer=answer+d[s[i]]
        answer=answer+d[s[length-1]]
        return answer
  • 定义一个 Solution 类,该类包含一个 romanToInt 方法用于将罗马数字转换为整数。
  • 初始化变量 answer 为 0,用于保存转换后的整数值。
  • 获取输入字符串 s 的长度,并保存在变量 length 中。
  • 创建一个字典 d,将每个罗马数字字符与对应的数值进行映射。
  • 使用 for 循环遍历 s 中的每个字符,从第一个字符到倒数第二个字符。
  • 如果当前字符的数值小于后一个字符的数值,则将 answer 减去当前字符的数值。
  • 否则,将 answer 加上当前字符的数值。
  • 将 answer 加上最后一个字符所对应的数值,完成整个罗马数字的转换。
  • 返回最终的结果 answer。

这段代码的目的是通过遍历罗马数字字符串 s,根据相邻字符的大小关系,将对应的数值累加或累减到 answer 中,最终得到整数形式的罗马数字。

第二种方案:

class Solution:
    def romanToInt(self, s: str) -> int:
        answer = 0
        length = len(s)
        d = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
        
        for i in range(length-1):
            if d[s[i]] < d[s[i+1]]:
                answer -= d[s[i]]
            else:
                answer += d[s[i]]
        
        answer += d[s[length-1]]
        
        return answer

再次尝试:

class Solution:
    def romanToInt(self, s: str) -> int:
        d = {
            'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000
        }
        res = 0
        prev_val = 0
        
        for c in reversed(s):
            curr_val = d[c]
            if curr_val < prev_val:
                res -= curr_val
            else:
                res += curr_val
            prev_val = curr_val
        
        return res

最后一版:

class Solution:
    def romanToInt(self, s: str) -> int:
        roman_values = {
            'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000
        }
        res = 0
        prev_val = 0
        
        for c in reversed(s):
            curr_val = roman_values[c]
            if curr_val < prev_val:
                res -= curr_val
            else:
                res += curr_val
            prev_val = curr_val
        
        return res
  • 定义一个 Solution 类,该类包含一个 romanToInt 方法用于将罗马数字转换为整数。
  • 创建一个字典 roman_values,将每个罗马数字字符与对应的数值进行映射。
  • 初始化变量 res 为 0,用于保存转换后的整数值。
  • 初始化变量 prev_val 为 0,用于保存前一个字符的数值。
  • 使用 reversed() 函数对字符串 s 进行反向迭代,从最后一个字符到第一个字符。
  • 对于每个字符 c,获取它对应的数值 curr_val。
  • 如果 curr_val 小于 prev_val,说明当前字符表示的数值应该减去,因此将其从 res 中减去。
  • 否则,将 curr_val 加到 res 中。
  • 更新 prev_val 为当前字符的数值。
  • 返回最终的结果 res,即整数形式的罗马数字。

这段代码的目的是通过反向迭代罗马数字字符串 s,根据相邻字符的大小关系,将对应的数值累加或累减到 res 中,最终得到整数形式的罗马数字。代码利用了反向迭代的特性,避免了每次比较字符的前后关系,从而简化了逻辑和代码实现。

最终的结果为:

在这里插入图片描述

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

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

相关文章

2023年市场规模将超147亿美元,中国人工智能产业的“风口”来了吗?

2023年IDC中国ICT市场趋势论坛于5月10日召开&#xff0c;会议重点探讨了人工智能、工业互联网、网络安全、大数据、云计算等领域&#xff0c;并强调了智能终端、智慧城市和半导体等行业的前景。 IDC预计&#xff0c;中国人工智能市场规模在2023年将超过147亿美元&#xff0c;到…

Day2 排序子序列、倒置字符串

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C/C相关题解 &#x1f383;操作环境&#xff1a; Visual Studio 2019 版本 16.11.17 文章目录 选择题1.字符串/C指针2.计算机组成原理 编程题1.排序子序列2.倒置字符串 选择题 1.字符串/C指针 题目&#xff…

【网络协议详解】——数据链路层协议(学习笔记)

&#x1f4d6; 前言&#xff1a;数据链路层是 OSI 模型中的第二层&#xff0c;位于物理层之上&#xff0c;是通信网络中的重要组成部分之一。数据链路层协议负责将网络层传输的数据分组封装成帧&#xff0c;传输到物理层&#xff0c;并通过物理介质进行传输。同时&#xff0c;数…

为什么有些同事昨天还干的好好地,今天就离职了老板都留不住?

HR时常会遭遇员工突发申请离职&#xff0c;对于一些核心岗位员工的离职&#xff0c;甚至没有时间去挽留。 但从心理学的角度来说&#xff0c;人的行为与意识是相互反应、互加映衬的。 也就是说&#xff0c;员工离职意识的产生与发展&#xff0c; 与他近期的行为息息相关。 与…

零基础学软件测试怎么样? 完好就业吗

在当今数字化快速发展的社会中&#xff0c;软件行业已经成为了一个具有巨大潜力和广阔前景的行业。而软件测试作为软件开发过程中不可或缺的一部分&#xff0c;也因此成为了备受瞩目的职业之一。 对于零基础的人来说&#xff0c;学习软件测试是一项非常实用的技能&#xff0c;…

PyQt5开发入门到IP查询工具实现

1 基本介绍 1.1 简介 ,QT 是最强大的 GUI 库之一&#xff0c;PyQt 是 Python 绑定 QT 应用的框架,是最强大和流行的跨平台 GUI 库之一。 PyQt 兼容所有流行的操作系统&#xff0c;包括 Windows、Linux 和 Mac OS。 它是双重许可的&#xff0c;可在 GPL 和商业许可下使用。新…

stm32f407单片机上通过HAL库实现can总线数据的收发

最近在使用can总线&#xff0c;由于这个以前接触的比较少&#xff0c;所以调试代码的时候直接是下载的正点原子的例程&#xff0c;在这个基础上修改调试的。现在将调试中遇到的问题&#xff0c;总结一下&#xff0c;避免以后踩坑。目前写了一个查询方式的&#xff0c;一个中断方…

Kubernetes第4天

第六章 Pod控制器详解 本章节主要介绍各种Pod控制器的详细使用。 Pod控制器介绍 Pod是kubernetes的最小管理单元&#xff0c;在kubernetes中&#xff0c;按照pod的创建方式可以将其分为两类&#xff1a; 自主式pod&#xff1a;kubernetes直接创建出来的Pod&#xff0c;这种p…

Nginx的原理

Nginx的原理 1、mater 和 worker2、worker 如何进行工作的3、一个 master 和多个 woker 有好处4、设置多少个 woker 合适5、连接数 worker_connection 1、mater 和 worker 2、worker 如何进行工作的 3、一个 master 和多个 woker 有好处 &#xff08;1&#xff09;可以使用 ng…

Kubernetes第5天

第七章 Service详解 本章节主要介绍kubernetes的流量负载组件&#xff1a;Service和Ingress。 Service介绍 ​ 在kubernetes中&#xff0c;pod是应用程序的载体&#xff0c;我们可以通过pod的ip来访问应用程序&#xff0c;但是pod的ip地址不是固定的&#xff0c;这也就意味着…

【计算机网络详解】——数据链路层(学习笔记)

&#x1f4d6; 前言&#xff1a;数据链路层提供了一种在不可靠的物理介质上传输数据的方式&#xff0c;并负责在网络层和物理层之间提供一个可靠的通信连接。本文将对数据链路层进行详细的介绍&#xff0c;包括数据链路层的定义、协议、功能和应用等方面。 目录 &#x1f552; …

Jenkins持续集成之jenkins安装入门教学

Jenkins安装 1、下载jenkins&#xff1b;官方地址&#xff1a;https://www.jenkins.io/ 2、点击Download 3、下载windows版本的安装包后缀为msi&#xff1b; 4、双击安装&#xff1b;如下图 5、安装到指定的盘&#xff1b;再点击next 6、勾选第一个框&#xff1b;再点击next 7…

《Netty》从零开始学netty源码(五十八)之NioEventLoop.execute()

目录 NioEventLoop.execute()addTask()startThread()NioEventLoop.run()select()处理keys与执行任务processSelectedKeys()处理AbstractNioChannelselectAgain() runAllTasks()fetchFromScheduledTaskQueue()runAllTasksFrom()afterRunningAllTasks() 带截止时间的runAllTasks(…

国考省考行测:图形推理题1,2平移,旋转,翻转

国考省考行测&#xff1a;图形推理题1,2平移&#xff0c;旋转&#xff0c;翻转 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重要的还是申论和行测&#xff0c;所以大家认真准备吧&#xff…

[数据结构 -- C语言] 栈(Stack)

目录 1、栈 1.1 栈的概念及结构 2、栈的实现 2.1 接口 3、接口的实现 3.1 初始化 3.2 入栈/压栈 3.3 出栈 3.4 获取栈顶元素 3.5 获取栈中有效元素个数 3.6.1 bool 类型接口 3.6.2 int 类型接口 3.7 销毁栈 4、完整代码 5、功能测试 1、栈 1.1 栈的概念及结构 …

软件测试工程师简历要怎么写,才能让HR看到

作为软件测试的从业者&#xff0c;面试或者被面试都是常有的事。 可是不管怎样&#xff0c;和简历有着理不清的关系&#xff0c;面试官要通过简历了解面试者的基本信息、过往经历等。】、 如果你不知道软件测试简历怎么写&#xff0c;可以看看这个视频是怎么写的&#xff0c;…

ARM-底层/Day2

.text .global _start _start:mov r0,#9mov r1,#15bl cmp_funccmp_func:cmp r0,r1beq stop 相等则跳转结束 subhi r0,r0,r1subcc r1,r1,r0mov pc,lr 不相等则返回执行 stop: b stop .end 循环实现1~100之间的和 .text .global _start _start:mov r0,#0mov r1,#1bl sum_fun…

CCF-CSP 202104-1 灰度直方图

简单的一题&#xff0c;理解题意&#xff0c;使用哈希数组即可 #include<iostream>using namespace std;int L,n,m; int mapp[505][505]; int arr[300];int main(){cin>>n>>m>>L;for(int i0;i<n;i){for(int j0;j<m;j){cin>>mapp[i][j];arr…

C++之STL

一、六大组件&#xff1a; 容器&#xff1a; 各种数据结构&#xff0c;如vector、list、deque、set、map等,用来存放数据&#xff0c;从实现角度来看&#xff0c;STL容器是一种class template。 算法&#xff1a; 各种常用的算法&#xff0c;如sort、find、copy、for_each。…

你也可以成为营销策划大咖,只需掌握这些技巧

本人是从业营销策划行业近10年的老广告人&#xff0c;我说的话你可以选择相信。 千万不要看轻了广告策划这个职业的技术含量&#xff0c;不是说你语言文字能力比较好就一定能够适合这个行业。 想要进入这个行业的大公司&#xff0c;你如果是刚毕业的新人的话&#xff0c;首先…