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

LeetCode13 罗马数字转整数

  1. 题目
    罗马数字包含以下七种字符: I, V, X, L,C,D 和 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。
    给定一个罗马数字,将其转换成整数。

  2. 示例
    示例 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.

  3. 解题思路
    1. 枚举方式,遍历串,每次多看后面一个字符,如果符合结果则本次循环取两个字符进行加和,否则使用一个字符进行加和。
    2. 根据罗马数字结构定义,通常情况都是按照大数在前小数在后的形式排列的,特殊几种结构小数在前,这几种结构的值是两数的差,所以可以进行遍历罗马数数字串,如果遇到下一位大于当前为的值,则减去当前值。
  4. 代码(Java)
    // 方法一
    import java.util.HashMap;
    class Solution {public int romanToInt(String s) {HashMap<String, Integer> map = new HashMap<String, Integer>() {{put("I", 1);put("V", 5);put("X", 10);put("L", 50);put("C", 100);put("D", 500);put("M", 1000);put("IV", 4);put("IX", 9);put("XL", 40);put("XC", 90);put("CD", 400);put("CM", 900);}};int i = 0;int res = 0;while (i < s.length()) {if (i + 1 < s.length()) {String x = "" + s.charAt(i) + s.charAt(i + 1);if (map.get(x) != null) {res += map.get(x);i += 2;continue;}}String x = "" + s.charAt(i);res += map.get(x);i++;}return res;}
    }
    // 方法二
    class Solution {public int romanToInt(String s) {int sum = 0;int pre = getValue(s.charAt(0));for (int i = 1; i < s.length(); i++) {int num = getValue(s.charAt(i));if (num > pre) {sum -= pre;} else {sum += pre;}pre = num;}sum += pre;return sum;}private int getValue(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;default:return 0;}}
    }

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

相关文章:

  • 【Hudi】Upsert原理
  • 信息系统服务:演绎数字时代的征程
  • rust连接postgresql数据库
  • [面试] 什么是死锁? 如何解决死锁?
  • 网络原理 HTTP _ HTTPS
  • 软件实际应用实例,茶楼收银软件管理系统操作流程,茶室计时计费会员管理系统软件试用版教程
  • 网络安全“三保一评”深度解析
  • IDA使用-2023CICSN华中赛区pwn题逆向为例
  • 安装虚拟机出现的一些问题
  • Git+py+ipynb Usage
  • eBPF实践篇之环境搭建
  • 机器学习科普及学习路线
  • 如何在本地电脑部署HadSky论坛并发布至公网可远程访问【内网穿透】
  • Spring Boot 笔记 025 主界面
  • (done) Positive Semidefinite Matrices 什么是半正定矩阵?如何证明一个矩阵是半正定矩阵? 可以使用特征值
  • 七、矩阵的初等变换
  • CSS background-size
  • 【机器学习】特征工程之特征选择
  • Java中PDF文件传输有哪些方法?
  • 前后端分离Vue+ElementUI+nodejs蛋糕甜品商城购物网站95m4l
  • Pytorch 复习总结 3
  • 2024年危险化学品经营单位主要负责人证考试题库及危险化学品经营单位主要负责人试题解析
  • go使用trpc案例
  • nodejs+vue+ElementUi废品废弃资源回收系统
  • 【Java程序设计】【C00277】基于Springboot的招生管理系统(有论文)
  • 汇编语言与接口技术实践——秒表
  • 【数据结构与算法】(19)高级数据结构与算法设计之 图 拓扑排序 最短路径 最小生成树 不相交集合(并查集合)代码示例
  • OSCP靶场--Nickel
  • 新建工程——库函数版
  • java 数据结构栈和队列