罗马数字是由七个不同的符号表示:I
,V
,X
,L
,C
,D
和M
。
Symbol(标记) | Value (值) |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
例如,2
用罗马数字II
书写,只是将两个I
加在一起。12
作为写XII
,这是用X + II
。数字27
写为XXVII
,即XX + V + II
。
罗马数字通常从左到右从大到小书写。但是,四的数字不是IIII
。而是将数字四写为IV
。因为一个在五
之前,所以我们减去它等于四
。相同的原理适用于数字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 =“ III” |
输出: | 3 |
解释: | M = 1000, CM = 900, XC = 90 and IV = 4 |
(跳转至:问题描述||代码:JavaScript | Python | Java | C ++)
关于罗马数字计数的唯一真正棘手的事情是,数字被用作减值而不是加值。在“IV”,例如,值“I”,1,从的值中减去“V”,5。否则,您只需将所有数字的值相加即可。
关于减号,我们应该意识到的一件事是它们是可识别的,因为它们出现在较大的数字之前。这意味着迭代罗马数字的更简单方法是从右到左,以帮助进行识别过程。
因此,在这里要做的一件简单的事情是向后遍历S,查找每个字母的值,然后将其添加到我们的答案(ans)中。如果我们遇到的字母值小于到目前为止所看到的最大字母值,则应减去而不是加。
标准方法是使用一个单独的变量来跟踪看到的最高值,但是这里有一个更简单的技巧。由于数字通常以罗马数字符号从右到左增加,因此任何减数也必须小于我们当前的ans。
因此,我们可以在这里避免使用额外的变量。我们确实遇到了重复数字导致问题的情况(即“III”),但是我们可以通过将num乘以2到4之间的任意数字,然后再将其与ans进行比较来清除它,因为数字在数值上的跃迁为至少5倍。
一旦我们知道如何正确识别减数,就可以简单地向后迭代S来查找并返回ans。
执行代码:JavaScript和Python都可以非常快速地使用对象/区分对象进行 *** 作,因此我们将使用查找表来获取罗马数字值。
Java和C ++都不处理对象,因此我们将使用切换用例以相同的方式工作。
JavaScript代码:(跳转至:问题描述||解决思路)
const roman = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}var romanToInt = function(S) { let ans = 0 for (let i = S.length-1; ~i; i--) { let num = roman[S.charat(i)] if (4 * num < ans) ans -= num else ans += num } return ans};
Python代码:
(跳转至:问题描述||解决思路)
roman = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}class Solution: def romanToInt(self, S: str) -> int: ans = 0 for i in range(len(S)-1,-1,-1): num = roman[S[i]] if 4 * num < ans: ans -= num else: ans += num return ans
Java代码:(跳转至:问题描述||解决思路)
@H_952_404@class Solution { public int romanToInt(String S) { int ans = 0, num = 0; for (int i = S.length()-1; i >= 0; i--) { switch(S.charat(i)) { case 'I': num = 1; break; case 'V': num = 5; break; case 'X': num = 10; break; case 'L': num = 50; break; case 'C': num = 100; break; case 'D': num = 500; break; case 'M': num = 1000; break; } if (4 * num < ans) ans -= num; else ans += num; } return ans; }}C++代码:
(跳转至:问题描述||解决思路)
class Solution {public: int romanToInt(string S) { int ans = 0, num = 0; for (int i = S.size()-1; ~i; i--) { switch(S[i]) { case 'I': num = 1; break; case 'V': num = 5; break; case 'X': num = 10; break; case 'L': num = 50; break; case 'C': num = 100; break; case 'D': num = 500; break; case 'M': num = 1000; break; } if (4 * num < ans) ans -= num; else ans += num; } return ans; }};
总结 以上是内存溢出为你收集整理的使用JavaScript | Python | Java | C++解决从罗马数字转换到阿拉伯数字全部内容,希望文章能够帮你解决使用JavaScript | Python | Java | C++解决从罗马数字转换到阿拉伯数字所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)