罗马数字包含以下七种字符:I V X LCD 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。这个特殊的规则只适用于以下六种情况:

  1. - `I` 可以放在 `V` (5) `X` (10) 的左边,来表示 4 9
  2. - `X` 可以放在` L` (50) ` C` (100) 的左边,来表示 40 90
  3. - `C` 可以放在 `D `(500) `M` (1000) 的左边,来表示 400 900

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

示例 1:

输入: "III"

输出: 3

示例 2:

输入: "IV"

输出: 4

示例 3:

输入: "IX"

输出: 9

示例 4:

输入: "LVIII"

输出: 58

解释: C = 100, L = 50, XXX = 30, III = 3.

示例 5:

输入: "MCMXCIV"

输出: 1994

解释: M = 1000, CM = 900, XC = 90, IV = 4.

  1. /**
  2. * @param {string} s
  3. * @return {number}
  4. */
  5. var romanToInt = function (s) {
  6. let charNum = {
  7. I: 1,
  8. V: 5,
  9. X: 10,
  10. L: 50,
  11. C: 100,
  12. D: 500,
  13. M: 1000,
  14. };
  15. let sum = 0;
  16. let len = s.length;
  17. for (let i = 0; i <= len; i++) {
  18. if (s[i] === "I") {
  19. if (s[i + 1] === "V" || s[i + 1] === "X") {
  20. sum += charNum[s[i + 1]] - charNum[s[i]];
  21. i++;
  22. continue;
  23. }
  24. } else if (s[i] === "X") {
  25. if (s[i + 1] === "L" || s[i + 1] === "C") {
  26. sum += charNum[s[i + 1]] - charNum[s[i]];
  27. i++;
  28. continue;
  29. }
  30. } else if (s[i] === "C") {
  31. if (s[i + 1] === "D" || s[i + 1] === "M") {
  32. sum += charNum[s[i + 1]] - charNum[s[i]];
  33. i++;
  34. continue;
  35. }
  36. }
  37. if (!s[i]) {
  38. break;
  39. }
  40. sum += charNum[s[i]];
  41. }
  42. return sum;
  43. };

实在是想不出有什么办法能判断结果,看了别人的没想到这么简单

  1. /**
  2. * @param {string} s
  3. * @return {number}
  4. */
  5. var romanToInt = function (s) {
  6. let charNum = {
  7. I: 1,
  8. V: 5,
  9. X: 10,
  10. L: 50,
  11. C: 100,
  12. D: 500,
  13. M: 1000,
  14. };
  15. let sum = 0;
  16. let len = s.length;
  17. for (let i = 0; i < len; i++) {
  18. if(charNum[s[i]]<charNum[s[i+1]]){
  19. sum-=charNum[s[i]];
  20. }else {
  21. sum+=charNum[s[i]];
  22. }
  23. }
  24. return sum;
  25. };

leetcode 罗马数字转整数的更多相关文章

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

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

  2. LeetCode 13 Roman to Integer(罗马数字转为整数)

    题目链接 https://leetcode.com/problems/roman-to-integer/?tab=Description   int toNumber(char ch) { switc ...

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

  4. LeetCode 13. 罗马数字转整数(Roman to Integer)

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

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

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

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

  7. Leetcode#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 ,即 ...

  8. 【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 ,即为 ...

  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. IOS 上传ipa文件失败

    ** No suitable application records were found. Verify your bundle identifier 'com.***' is correct. i ...

  2. centos7 二进制安装MySQL5.7.22

    1.详细描安装的过程 1.1关闭防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service ...

  3. CPU GPU FPU TPU 及厂商

    1,AMD 既做CPU又做显卡2,Inter 全球最大的CPU厂商,GPU,FPGA3,NVIDA 人工智能起家的公司,且一直在做,显卡最出名,CUDA让N卡胜了AMD CPU上 AMD - Inte ...

  4. maven的pom报plugins缺失的解决方法

    maven的pom报plugins却是的解决方法. 引用 Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom: ...

  5. 迷你MVVM框架 avalonjs 学习教程5、显示隐藏控制

    今天的主角是ms-visible,它的效果类拟于jQuery的toggle,如果它后面跟着的表达式为真值时则显示它所在的元素,为假值时则隐藏.不过显示不是 display:none这么简单,众所周知, ...

  6. VML元素的相关资料

    虽然VML已经过气了,但有时我还不得不使用它,下面是我收集或研究得到的一些东西. 判定一个元素是否为VML元素 function isVML(el) { if (el && el.no ...

  7. 迷你MVVM框架 avalonjs 沉思录 第1节 土耳其开局

    #cnblogs_post_body p{ text-indent:2em; margin-top: 1em; } 正如一切传说的开端那样,有一远古巨神开天辟地,然后就是其他半神喧宾夺主.我们对最巨贡 ...

  8. Python运维开发基础03-语法基础

    上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现" ...

  9. WSAEvent

    [WSAEvent] 1.WSACreateEvent.创建WSA事件. 2.WSAEventSelect. lNetworkEvents [in] A bitmask that specifies ...

  10. Go Flow Control

    [Go Flow Control] 1.for没有(),必须有{}. 2.for的前后表达式可以为空. 3.没有while,for即是while. 4.无穷循环. 5.if没有(),必须有{}. 6. ...