【字符串】13. 罗马数字转整数

简介: 【字符串】13. 罗马数字转整数

1. 题目描述

2. 题目分析

  1. 一开始想的是,直接利用字符串进行模拟,当遇到 I、X、C 时,判断后面是不是为题目中的几个字母(前提保证i+1 < length),如果是的话,直接用后面的数字减去前面的数字,这样的话,ifelse判断比较多,不算是最佳的方案
  2. 最佳方案:我们用一个hashmap来存储他的映射,如下所示
key       value
      I             1
      V             5
      X             10
      L             50
      C             100
      D             500
      M             1000

这样的话,我们在进行遍历的时候,只需要考虑map.get(i)与map.get(i+1)的大小关系即可,

注意一下map的越界就可以了。

3. 题目代码

class Solution {
    public int romanToInt(String s) {
    int sum = 0;
    HashMap<Character, Integer> map = new HashMap<Character, Integer>();
    add(map);
    char[] c = s.toCharArray();
    int x = map.get(c[0]);
    for (int i = 1; i < c.length; i++) {
      int num = map.get(c[i]);
      if (x < num) {
        sum = sum + num - x;
        i++;
      } else {
        sum = sum + x;
      }
      x = num;
    }
    return sum;
  }
  public void add(HashMap<Character, Integer> map) {
    map.put('I', 1);
    map.put('V', 5);
    map.put('X', 10);
    map.put('L', 50);
    map.put('C', 100);
    map.put('D', 500);
    map.put('M', 1000);
  }
}


相关文章
【Leetcode-13.罗马数字转整数 -14.最长公共前缀】
【Leetcode-13.罗马数字转整数 -14.最长公共前缀】
58 0
|
29天前
整数转罗马数字
罗马数字由 I、V、X、L、C、D、M 七种字符组成,分别代表 1、5、10、50、100、500、1000。通常小数值位于大值右侧,如 12 表示为 XII;特殊情况下,小值位于大值左侧表示减法,如 4 表示为 IV。转换规则适用于 1 至 3999 的整数。
20 0
|
4月前
|
Java
罗马数字转整数
这篇文章提供了一个Java方法,用于将罗马数字转换为整数,通过一个字符一个字符地解析罗马数字字符串并根据特定规则进行相应的加法或减法运算。
|
7月前
13. 罗马数字转整数
13. 罗马数字转整数
50 2
|
7月前
12. 整数转罗马数字
12. 整数转罗马数字
62 1
|
6月前
13.罗马数字转整数
13.罗马数字转整数
|
6月前
|
算法
12.整数转罗马数字
12.整数转罗马数字
|
7月前
|
测试技术
【力扣】13. 罗马数字转整数、12. 整数转罗马数字
【力扣】13. 罗马数字转整数、12. 整数转罗马数字
LeetCode:13、罗马数字转整数
LeetCode:13、罗马数字转整数
|
7月前
|
测试技术 C++
罗马数字转整数(C++)
罗马数字转整数(C++)
70 0