原题地址: 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:

输入: 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 。

关于罗马数字的详尽书写规则,可以参考 罗马数字 - Mathematics 。

解答方法:

1.

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

2.评论中解法

  1. class Solution {
  2. public int romanToInt(String s) {
  3. s = s.replace("IV","a");
  4. s = s.replace("IX","b");
  5. s = s.replace("XL","c");
  6. s = s.replace("XC","d");
  7. s = s.replace("CD","e");
  8. s = s.replace("CM","f");
  9. int res = 0;
  10. for (int i = 0; i < s.length(); i++) {
  11. res += getValue(s.charAt(i));
  12. }
  13. return res;
  14. }
  15. public int getValue(char c) {
  16. switch(c) {
  17. case 'I': return 1;
  18. case 'V': return 5;
  19. case 'X': return 10;
  20. case 'L': return 50;
  21. case 'C': return 100;
  22. case 'D': return 500;
  23. case 'M': return 1000;
  24. case 'a': return 4;
  25. case 'b': return 9;
  26. case 'c': return 40;
  27. case 'd': return 90;
  28. case 'e': return 400;
  29. case 'f': return 900;
  30. }
  31. return 0;
  32. }
  33. }

[LeetCode]13.罗马数字转整数(Java)的更多相关文章

  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. 罗马数字转整数(Roman to Integer)

    13. 罗马数字转整数 13. Roman to Integer 题目描述 罗马数字包含以下七种字符: I,V,X,L,C,D 和 M. 字符        数值  I           1  V  ...

  4. 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 例如,罗马数 ...

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

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

  6. 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 ...

  7. 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 ...

  8. leetcode算法13.罗马数字转整数

    哈喽!大家好,我是[学无止境小奇],一位热爱分享各种技术的博主! [学无止境小奇]的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过. [学无止 ...

  9. 【LeetCode】13. 罗马数字转整数

    题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为 ...

随机推荐

  1. 实验 6 :OpenDaylight 实验——OpenDaylight 及 Postman实现流表下发

    实验 6 :OpenDaylight 实验--OpenDaylight 及 Postman实现流表下发 一.实验目的 熟悉 Postman 的使用:熟悉如何使用 OpenDaylight 通过 Pos ...

  2. host解析

    首先了解一下什么是hosts文件: hosts是一个没有扩展名的系统文件,可以用记事本等文本编辑工具打开,起作用就是将一些常用的"网址域名"与其对应的"IP地址" ...

  3. [Android测试] Appium的一些坑问题错误解决 与 技巧集锦

    转:https://blog.csdn.net/niubitianping/article/details/52624417 1. error: Failed to start an Appium s ...

  4. day 8 求平均数

    fun()函数的功能:计算形参x所指数组中N个数的平均值,(这里全部取浮点数) 并输出,在将大于平均值的数放在形参y所指的数组中,在主函数输出. 效果还不错: 还存在需要优化的分析:其实存到y数组中的 ...

  5. Chrome本地跨域请求设置,实现HTML模板页

    按照需求,公司现在需要通过第三方的API反馈的数据,进行在本地就可以打开的静态页面程序(完全脱离IIS等服务器).为了更好的维护项目,需要实现静态HTML引入HTML模板,完成ASP.NET模板页的类 ...

  6. elasticsearch算法之词项相似度算法(一)

    一.词项相似度 elasticsearch支持拼写纠错,其建议词的获取就需要进行词项相似度的计算:今天我们来通过不同的距离算法来学习一下词项相似度算法: 二.数据准备 计算词项相似度,就需要首先将词项 ...

  7. elasticsearch启动流程

    本文基于ES2.3.2来描述.通过结合源码梳理出ES实例的启动过程. elasticsearch的启动过程是根据配置和环境组装需要的模块并启动的过程.这一过程就是通过guice注入各个功能模块并启动这 ...

  8. java多态概述特点转型I

    1 package face_09; 2 3 import com.sun.jdi.Method; 4 5 /* 6 * 对象的多态性. 7 * class 动物 8 * {} 9 * 10 * cl ...

  9. Edge 91以上554、10080出现ERR_UNSAFE_PORT解决办法

    解决办法 在注册表下面这个路径新建一个键值名为1的,输入10080(或554),重启浏览器,即可解决问题. 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Micro ...

  10. K8s PV and PVC and StorageClass

    PVC和PV之间没有依靠ID.名称或者label匹配,而是靠容量和访问模式,PVC的容量和访问模式需要是某个PV的子集才能自动匹配上.注意:PVC和PV是一对一的,也即一个PV被一个PVC自动匹配后, ...