13. 罗马数字转整数

13. Roman to Integer

题目描述

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

给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

LeetCode13. Roman to Integer简单

示例 1:

输入: "III"
输出: 3

示例 2:

输入: "IV"
输出: 4

示例 3:

输入: "IX"
输出: 9

示例 4:

输入: "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3。

示例 5:

输入: "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4。

Java 实现

解法一

  1. class Solution {
  2. public int romanToInt(String s) {
  3. int sum = 0;
  4. if (s.indexOf("IV") != -1) {
  5. sum -= 2;
  6. }
  7. if (s.indexOf("IX") != -1) {
  8. sum -= 2;
  9. }
  10. if (s.indexOf("XL") != -1) {
  11. sum -= 20;
  12. }
  13. if (s.indexOf("XC") != -1) {
  14. sum -= 20;
  15. }
  16. if (s.indexOf("CD") != -1) {
  17. sum -= 200;
  18. }
  19. if (s.indexOf("CM") != -1) {
  20. sum -= 200;
  21. }
  22. for (int i = 0; i < s.length(); i++) {
  23. if (s.charAt(i) == 'I') {
  24. sum += 1;
  25. } else if (s.charAt(i) == 'V') {
  26. sum += 5;
  27. } else if (s.charAt(i) == 'X') {
  28. sum += 10;
  29. } else if (s.charAt(i) == 'L') {
  30. sum += 50;
  31. } else if (s.charAt(i) == 'C') {
  32. sum += 100;
  33. } else if (s.charAt(i) == 'D') {
  34. sum += 500;
  35. } else if (s.charAt(i) == 'M') {
  36. sum += 1000;
  37. }
  38. }
  39. return sum;
  40. }
  41. }

解法二

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. class Solution {
  4. public int romanToInt(String s) {
  5. if (s == null || s.length() == 0) {
  6. return 0;
  7. }
  8. Map<Character, Integer> map = new HashMap<>();
  9. map.put('I', 1);
  10. map.put('V', 5);
  11. map.put('X', 10);
  12. map.put('L', 50);
  13. map.put('C', 100);
  14. map.put('D', 500);
  15. map.put('M', 1000);
  16. int len = s.length();
  17. int sum = map.get(s.charAt(len - 1));
  18. for (int i = len - 2; i >= 0; i--) {
  19. if (map.get(s.charAt(i)) < map.get(s.charAt(i + 1))) {
  20. sum -= map.get(s.charAt(i));
  21. } else {
  22. sum += map.get(s.charAt(i));
  23. }
  24. }
  25. return sum;
  26. }
  27. }

相似题目

参考资料

LeetCode 13. 罗马数字转整数(Roman to Integer)的更多相关文章

  1. C#版 - Leetcode 13. 罗马数字转整数 - 题解

    C#版 - Leetcode 13. 罗马数字转整数 - 题解 Leetcode 13. Roman to Integer 在线提交: https://leetcode.com/problems/ro ...

  2. Java实现 LeetCode 13 罗马数字转整数

    13. 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 ...

  3. leetcode 13. 罗马数字转整数 及 12. 整数转罗马数字

    13. 罗马数字转整数 问题描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如,罗马数 ...

  4. 罗马数字转整数 · Roman to Integer

    13. Roman to Integer [抄题]: [暴力解法]: 时间分析: 空间分析: [思维问题]: 没有想到罗马字是逆序的情况 没有想到要先用toCharArray()方法把字符串拆成一个字 ...

  5. [Swift]LeetCode13. 罗马数字转整数 | Roman to Integer

    Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...

  6. [LeetCode]13.罗马数字转整数(Java)

    原题地址: roman-to-integer 题目描述: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M ...

  7. LeetCode - 13. 罗马数字转整数

    1 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I V X L C D M 例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 写做 XII , ...

  8. LeetCode:罗马数字转整数【13】

    LeetCode:罗马数字转整数[13] 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 10 ...

  9. 13. 罗马数字转整数----LeetCode

    13. 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 ...

随机推荐

  1. Ajax的个人总结

    Ajax Ajax是Asynchronous Javascript And XML(异步JavaScript和XML)的缩写. Ajax技术描述了使用脚本操纵HTTP和Web服务器进行数据交换,在页面 ...

  2. Python 下载超大文件

    使用python下载超大文件, 直接全部下载, 文件过大, 可能会造成内存不足, 这时候要使用requests 的 stream模式, 主要代码如下 iter_content:一块一块的遍历要下载的内 ...

  3. javascript中的indexOf与if判断的装逼写法

    常规indexOf与if判断写法: if("112233".indexOf("22")>-1) { console.log("很二") ...

  4. Cocos Creator 功能介绍

    cc.Class({ extends: cc.Component, properties: { anim: cc.Animation }, playRun: function() { this.ani ...

  5. 清理收藏夹中的json

    1.json的字符串与对象转换 $.parseJson(str)与JSON.parse(str) 返回值是true.另:json对象和字符串的相互转换 JSON.stringify(obj) 将JSO ...

  6. java 465端口发送邮件

    package com.fr.function; import java.io.IOException; import java.security.Security; import java.util ...

  7. Nginx location wildcard

    Module ngx_http_core_modulehttps://nginx.org/en/docs/http/ngx_http_core_module.html#location locatio ...

  8. CNeo编程语言概述

    C语言诞生于1970年,当时在AT&T实验室由Dennis Ritchie主导开发的.据说当时仅用了一周的时间就做好了C语言编译器,所以尽管C语言从90年正式纳入ISO标准委员会,其编号为IS ...

  9. Spark布隆过滤器(bloomFilter)

    数据过滤在很多场景都会应用到,特别是在大数据环境下.在数据量很大的场景实现过滤或者全局去重,需要存储的数据量和计算代价是非常庞大的.很多小伙伴第一念头肯定会想到布隆过滤器,有一定的精度损失,但是存储性 ...

  10. Linux虚拟内存的作用

    要深入了解linux内存运行机制,需要知道下面提到的几个方面:首先,Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存 ...