罗马数字转整数

迷南。 2023-07-24 03:12 79阅读 0赞

罗马数字包含以下七种字符: IVXLCDM

  1. 字符 数值
  2. I 1
  3. V 5
  4. X 10
  5. L 50
  6. C 100
  7. D 500
  8. 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 的范围内。

示例 1:

  1. 输入: "III"
  2. 输出: 3

示例 2:

  1. 输入: "IV"
  2. 输出: 4

示例 3:

  1. 输入: "IX"
  2. 输出: 9

示例 4:

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

示例 5:

  1. 输入: "MCMXCIV"
  2. 输出: 1994
  3. 解释: M = 1000, CM = 900, XC = 90, IV = 4.
  1. 首先将所有的组合可能性列出并添加到哈希表中
  2. 然后对字符串进行遍历,由于组合只有两种,一种是 1 个字符,一种是 2 个字符,其中 2 个字符优先于 1 个字符
  3. 先判断两个字符的组合在哈希表中是否存在,存在则将值取出加到结果 ans 中,并向后移2个字符。不存在则将判断当前 1 个字符是否存在,存在则将值取出加到结果 ans 中,并向后移 1 个字符
  4. 遍历结束返回结果 ans

    /**

    • @param {string} s
    • @return {number}
      */
      var romanToInt = function(s) {
      let map={
      I : 1,
      IV: 4,
      V: 5,
      IX: 9,
      X: 10,
      XL: 40,
      L: 50,
      XC: 90,
      C: 100,
      CD: 400,
      D: 500,
      CM: 900,
      M: 1000
      }
      let ans=0;
      for (let i = 0; i < s.length;) {
      if(i+1<s.length&&map[s.substring(i,i+2)]){
      ans+=map[s.substring(i,i+2)]
      i=i+2
      }else{
      ans+=map[s.substring(i,i+1)]
      i=i+1
      }
      }
      return ans
      };

发表评论

表情:
评论列表 (有 0 条评论,79人围观)

还没有评论,来说两句吧...

相关阅读