当前位置: 首页 > news >正文

Leetcode.13 罗马数字转整数

 关键词:to_string, string.size(), string.length()

1.题目

2.解答思路及解答

解答思路:

        首先,罗马数字表达中和常规数学表达类似,基本是按照从后往前,从小到大排列。因此,理论上只需要从后往前相加即可。

        受限于几种特殊情况,根据相加的顺序,如果是从小到大(从右往左,从下标大到小时),特殊情况IV,IX,XL,XC,CD,CM则特殊考虑,即遇到V、X判断左侧是否有I,否则特殊处理,没有I时正常处理,其他情况类似。

        需要注意的不仅是思路问题,本题从左往右相加也可计算,但是时刻需要注意下标溢出问题。

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

3.优秀答案

答案1:map比对

        该答案中利用map解决了常规思路中需要逐个if判断字母和对应特殊情况的问题(理论上switch就是多个if的语句,可以替代if,然而switch只能分类数字,而不能进行字母分类)。

        而且巧妙总结了罗马数字的规律:如果小的数字放在大数字左边就等于大数字减小数字的结果。

class Solution {
private:unordered_map<char, int> symbolValues = {{'I', 1},{'V', 5},{'X', 10},{'L', 50},{'C', 100},{'D', 500},{'M', 1000},};public:int romanToInt(string s) {int ans = 0;int n = s.length();for (int i = 0; i < n; ++i) {int value = symbolValues[s[i]];if (i < n - 1 && value < symbolValues[s[i + 1]]) {ans -= value;} else {ans += value;}}return ans;}
};作者:力扣官方题解
链接:https://leetcode.cn/problems/roman-to-integer/solutions/774992/luo-ma-shu-zi-zhuan-zheng-shu-by-leetcod-w55p/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

4.技术总结

1

unordered_map<char,int> XXX={

{‘I’,1},

{‘V’,5},

{‘X’,10},

}

map,XXX[char]返回int

http://www.lryc.cn/news/460763.html

相关文章:

  • 骨架提取(持续更新)
  • B3622 枚举子集
  • git submodule add用法
  • 计算机毕业设计 基于Python的汽车销售管理系统的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】
  • 主流的安全测试工具知识点
  • 如何接入实时期货行情数据 - 2024最新教程
  • 通义灵码:AI 编码的强大助力
  • docker 容器启动详解
  • 【spring ai】java 实现RAG检索增强,超快速入门
  • 【Java SE 题库】递归的魅力之--> 汉诺塔问题
  • 《为什么要在三层交换机 VLAN 上配置 IP 地址?》
  • Git的基本使用入门
  • Elasticsearch 入门
  • WebSocket 集成 Spring Boot 的实战指南
  • 无人机集群路径规划:四种优化算法(BKA、CO、PSO、PIO)求解无人机集群路径规划,提供MATLAB代码
  • 第二届 龙信杯 电子数据取证竞赛部分Writeup
  • 偷啥的都有!
  • 【中文注释】planning_scene_tutorial.cpp
  • 【Vue3】 h()函数的用法
  • Flask如何实现前后端分离项目
  • 二维码生成器 1.02.41| 一站式QR码生成器和美化工具
  • 腾讯云视立方·直播 SDK 合规使用指南
  • 在 Spring 中使用 @EhCache 注解作为缓存
  • npm install进度卡在 idealTree:node_global: sill idealTree buildDeps
  • 力扣1031. 两个非重叠子数组的最大和
  • 【Unity实战篇】 接入百度翻译,实现文本自动翻译功能
  • ubuntu samba
  • Linux系统和数据库常用的命令2
  • Golang | Leetcode Golang题解之第468题验证IP地址
  • mermaid 图表相关