描述
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
分析
从前往后扫描,用一个临时变量记录分段数字。
如果当前比前一个大,说明这一段的值应该是当前这个值减去上一个值。比如 IV = 5 – 1;否
则,将当前值加入到结果中,然后开始下一段记录。比如 VI = 5 + 1, II=1+1
代码

 1 public class RomanToInteger {
 2
 3     public static void main(String[] args) {
 4         // TODO Auto-generated method stub
 5         String roman = "CLXXXVII";
 6         System.out.println(romanToInteger2(roman));
 7     }
 8
 9     public static int romanToInteger(String roman) {
10         // int num=0;
11         // int radix[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
12         // String symbol[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX",
13         // "V", "IV", "I" };
14         if (roman.length() > 0) {
15             if (roman.charAt(0) == 'M') {
16                 roman = roman.substring(1);
17                 return 1000 + romanToInteger(roman);
18             }
19             if (roman.contains("CM")) {
20                 roman = roman.substring(2);
21                 return 900 + romanToInteger(roman);
22             }
23             if (roman.charAt(0) == 'D') {
24                 roman = roman.substring(1);
25                 return 500 + romanToInteger(roman);
26             }
27             if (roman.contains("CD")) {
28                 roman = roman.substring(2);
29                 return 400 + romanToInteger(roman);
30             }
31             if (roman.charAt(0) == 'C') {
32                 roman = roman.substring(1);
33                 return 100 + romanToInteger(roman);
34             }
35             if (roman.contains("XC")) {
36                 roman = roman.substring(2);
37                 return 90 + romanToInteger(roman);
38             }
39             if (roman.charAt(0) == 'L') {
40                 roman = roman.substring(1);
41                 return 50 + romanToInteger(roman);
42             }
43             if (roman.contains("XL")) {
44                 roman = roman.substring(2);
45                 return 40 + romanToInteger(roman);
46             }
47             if (roman.charAt(0) == 'X') {
48                 roman = roman.substring(1);
49                 return 10 + romanToInteger(roman);
50             }
51             if (roman.contains("IX")) {
52                 roman = roman.substring(2);
53                 return 9 + romanToInteger(roman);
54             }
55             if (roman.charAt(0) == 'V') {
56                 roman = roman.substring(1);
57                 return 5 + romanToInteger(roman);
58             }
59             if (roman.contains("IV")) {
60                 roman = roman.substring(2);
61                 return 4 + romanToInteger(roman);
62             }
63             if (roman.charAt(0) == 'I') {
64                 roman = roman.substring(1);
65                 return 1 + romanToInteger(roman);
66             }
67         }
68         return 0;
69     }

以下是不用递归的方法(转载)

 1 private static int map(char c) {
 2         switch (c) {
 3         case 'I':
 4             return 1;
 5         case 'V':
 6             return 5;
 7         case 'X':
 8             return 10;
 9         case 'L':
10             return 50;
11         case 'C':
12             return 100;
13         case 'D':
14             return 500;
15         case 'M':
16             return 1000;
17         default:
18             return 0;
19         }
20     }
21
22     public static int romanToInteger2(String s) {
23         int result = 0;
24         char[] sch = s.toCharArray();
25         for (int i = 0; i < sch.length; i++) {
26             if (i > 0 && map(sch[i]) > map(sch[i - 1])) {
27                 result += (map(sch[i]) - 2 * map(sch[i - 1]));
28             } else {
29                 result += map(sch[i]);
30             }
31         }
32         return result;
33     }

转载于:https://www.cnblogs.com/ncznx/p/9196518.html

Roman to Integer LeetCode Java相关推荐

  1. Roman to Integer - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Roman to Integer - LeetCode 注意点 大的数字在小的数字左边是正常情况,要考虑的是小的数字在大的数字右边的那8种情况 解法 解法 ...

  2. 罗马数字 java_【leetcode刷题】[简单]13.罗马数字转整数(roman to integer)-java

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

  3. # LeetCode集锦(四) - 第13题 Roman To Integer

    LeetCode集锦(四) - 第13题 Roman To Integer 问题 Roman numerals are represented by seven different symbols: ...

  4. JAVA Roman to Integer 罗马数转换为int型方法

    原题: 13. Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be ...

  5. LeetCode 13. Roman to Integer

    问题链接 LeetCode 13. Roman to Integer 题目解析 将罗马数字转换成普通数字. 解题思路 先简单了解一下什么是罗马数字. 基本字符:I,V,X,L,C,D,M 相应的阿拉伯 ...

  6. [LeetCode][JavaScript]Roman to Integer

    Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within t ...

  7. LeetCode算法入门- Roman to Integer Integer to Roman -day8

    LeetCode算法入门- Roman to Integer -day8 Roman to Integer: 题目描述: Roman numerals are represented by seven ...

  8. leetcode 8 Roman to Integer C++实现

    leetcode 8 Roman to Integer C++实现 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D ...

  9. leetcode 12 ,13 Integer to Roman amp;amp;Roman to Integer 罗马与阿拉伯数组转换

    12 Integer to Roman 13 Roman to Integer 有可能不注意的结果: class Solution {public:/*1.相同的数字连写,所表示的数等于这些数字相加得 ...

最新文章

  1. HDU1007 查找平面最近点对
  2. 最简便的备份MySql数据库方法
  3. Java动态代理与反射详解
  4. 校验输入框的内容不能重复_答应我,用了这个jupyter插件,别再重复造轮子了
  5. php数据关系图,如何利用navicat查看数据表的ER关系图
  6. 研发的未来在哪里?Serverless 云开发来了!
  7. 机器学习中对不均衡数据的处理方法
  8. 小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_7、开发必备工具PostMan接口工具介绍和使用...
  9. [Android1.6]动态添加View的问题
  10. JavaScript 设计模式核核心原理与应⽤实践(一)原则于核心思想
  11. “M1芯片”电脑杀手:Windows笔记本电脑目前岌岌可危
  12. matlab筛选excel数据统计,MATLAB读取Excel筛选符合条件的数据进行求均值等处理 程序......
  13. 关闭防火墙linux出错,linux关闭防火墙【应对办法】
  14. 对大学三年学习生活的总结与反思
  15. 常用颜色的RGB值及中英文名称对照表
  16. N维数组( ndarray)
  17. Java培训机构靠不靠谱?能不能学会?
  18. 关于mysql中5位数字转化为日期格式的问题
  19. COMSOL RLC串联电路暂态分析
  20. 同济子豪兄github_【B站UP主-同济子豪兄】华为云ModelArts零代码开发病虫害识别应用...

热门文章

  1. Windows XP SP2疑难速解50问
  2. 一个用JAVA实现的线段树类--泛型 重构.
  3. 玩转数据结构从入门到进阶一
  4. makefile入门
  5. 文件输入输出和string流
  6. DevOps笔记-02:DevOps与微服务之间是什么关系?
  7. MySQL第1天:整体目录
  8. C 关于unsigned int compzero = ~0;与unsigned int compzero = 0xFFFF; 的区别!
  9. jquery 设置style:display 其实很方便的
  10. 请重新认识你作为程序员的价值