LeetCode 罗马数字转整数
Posted xhBruce
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 罗马数字转整数相关的知识,希望对你有一定的参考价值。
13. 罗马数字转整数
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/roman-to-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
理解题意
罗 马 数 字 转 整 数 力 扣 官 方 题 解 \\mathbf 罗马数字转整数_{力扣官方题解} 罗马数字转整数力扣官方题解
- 罗马符号对应数字进行相加
- 罗马符号特例:两个字符组成;左边对应数字小于右边;右边减去左边所得
- 其实罗马符号特例只有
IV、IX、XL、XC、CD、CM
Map保存对应罗马数字
class Solution {
public int romanToInt(String s) {
HashMap<Character, Integer> romanValue = new HashMap<Character, Integer>();
romanValue.put('I', 1);
romanValue.put('V', 5);
romanValue.put('X', 10);
romanValue.put('L', 50);
romanValue.put('C', 100);
romanValue.put('D', 500);
romanValue.put('M', 1000);
int sum = 0;
int preNum = 0;
for (int i = 0; i < s.length(); i++) {
int num = romanValue.get(s.charAt(i));
if (preNum < num) {
sum -= preNum;
} else {
sum += preNum;
}
preNum = num;
}
sum += preNum;
return sum;
}
}
Switch判断对应罗马数字
class Solution {
public int romanToInt(String s) {
int sum = 0;
int preNum = 0;
for (int i = 0; i < s.length(); i++) {
int num = getRomanValue(s.charAt(i));
if (preNum < num) {
sum -= preNum;
} else {
sum += preNum;
}
preNum = num;
}
sum += preNum;
return sum;
}
private int getRomanValue(char ch) {
switch (ch) {
case 'I':
return 1;
case 'V':
return 5;
case 'X':
return 10;
case 'L':
return 50;
case 'C':
return 100;
case 'D':
return 500;
case 'M':
return 1000;
default:
return 0;
}
}
}
Switch判断+特殊罗马数字
class Solution {
public int romanToInt(String s) {
s.replace("IV", "a");//`IV、IX、XL、XC、CD、CM`
s.replace("IX", "b");
s.replace("XL", "e");
s.replace("XC", "f");
s.replace("CD", "g");
s.replace("CM", "h");
int sum = 0;
int preNum = 0;
for (int i = 0; i < s.length(); i++) {
int num = getRomanValue(s.charAt(i));
if (preNum < num) {
sum -= preNum;
} else {
sum += preNum;
}
preNum = num;
}
sum += preNum;
return sum;
}
private int getRomanValue(char ch) {
switch (ch) {
case 'I':
return 1;
case 'V':
return 5;
case 'X':
return 10;
case 'L':
return 50;
case 'C':
return 100;
case 'D':
return 500;
case 'M':
return 1000;
case 'a':
return 4;
case 'b':
return 9;
case 'e':
return 40;
case 'f':
return 90;
case 'g':
return 400;
case 'h':
return 900;
default:
return 0;
}
}
}
结果查看特殊罗马处理反而消耗更多时间和内存
以上是关于LeetCode 罗马数字转整数的主要内容,如果未能解决你的问题,请参考以下文章