题解:
JAVA
// by official
package 罗马数字转整数;
import java.util.HashMap;
import java.util.Map;
public class Solution2 {
public static int romanToInt(String s) {
Map<Character, Integer> symbolValues = new HashMap<Character, Integer>(){
{
put(‘I’, 1);
put(‘V’, 5);
put(‘X’, 10);
put(‘L’, 50);
put(‘C’, 100);
put(‘D’, 500);
put(‘M’, 1000);
}
};
System.out.println(symbolValues);
int ans = 0;
int n = s.length();
for (int i = 0; i < n; ++i) { // s = CMXCIX
int value = symbolValues.get(s.charAt(i));
if (i < n - 1 && value < symbolValues.get(s.charAt(i + 1))) {
ans -= value; // ans = ans - value
} else {
ans += value; // ans = ans + value
}
}
return ans;
}
public static void main(String[] args) {
System.out.println(romanToInt("XLIX"));
}
}
// by wlq
package 罗马数字转整数;
import java.util.HashMap;
public class Solution {
public static void main(String[] args) {
String s = "DCXXI";
String[] member = {"IV", "IX", "XL", "XC", "CD", "CM"};
int num = 0;
int num2 = 0;
HashMap<String, Integer> map = new HashMap<>();
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);
for(int i=0; i<member.length; i++){
boolean status = s.contains(member[i]);
if(status){
String s1 = String.valueOf(member[i].charAt(1));
String s2 = String.valueOf(member[i].charAt(0));
num2 = map.get(s1) - map.get(s2);
num = num + num2;
s = s.replace(member[i], "");
}
}
for(int i=0; i<s.length();i++){
String s3 = String.valueOf(s.charAt(i)); // str.charAt(i)为char类型要转为String类型
num = num + map.get(s3);
}
System.out.println(s);
System.out.println(num);
}
}
Python
// by official
class Solution:
SYMBOL_VALUES = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000,
}
def romanToInt(self, s: str) -> int:
ans = 0
n = len(s)
for i, ch in enumerate(s):
value = Solution.SYMBOL_VALUES[ch]
if i < n - 1 and value < Solution.SYMBOL_VALUES[s[i + 1]]:
ans -= value
else:
ans += value
return ans
if name == ‘main’:
s = Solution()
print(s.romanToInt("DCXXI"))
// by wlq
class Solution:
def romanToInt(self, s: str) -> int:
num = 0
dic = {
‘I’: 1,
‘V’: 5,
‘X’: 10,
‘L’: 50,
‘C’: 100,
‘D’: 500,
‘M’: 1000
}
for i in ['IV', 'IX', 'XL', 'XC', 'CD', 'CM']:
if i in s:
num2 = dic[i[1]] - dic[i[0]]
num = num + num2
s = s.replace(i, '')
for i in s:
num = num + dic[i]
return num
if name == ‘main’:
s = Solution()
print(s.romanToInt(‘DCXXI’))