链接
题意
根据罗马数字表示法给出阿拉伯数字表示法。
思路
按每一位的值相加即可,但若左边符号比右边符号小,是需要用较大值减较小值的。具体组数规则百度。
代码
Java:
public class Solution {
public int romanToInt(String s) {
char[] k = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
int[] v = {1, 5, 10, 50, 100, 500, 1000};
Map<Character, Integer> map = new HashMap();
for (int i = 0; i < k.length; i++) {
map.put(k[i], v[i]);
}
int res = 0;
for (int i = 0; i < s.length(); i++) {
if (i + 1 < s.length() && map.get(s.charAt(i)) < map.get(s.charAt(i + 1))) {
res += map.get(s.charAt(i + 1)) - map.get(s.charAt(i));
i++;
} else {
res += map.get(s.charAt(i));
}
}
return res;
}
}
// 较快的方法
public class Solution {
public int romanToInt(String s) {
int graph[] = new int[400];
graph['I'] = 1;
graph['V']=5;
graph['X']=10;
graph['L']=50;
graph['C']=100;
graph['D']=500;
graph['M']=1000;
char[] num = s.toCharArray();
// 遍历这个数,用sum来总计和
int sum = graph[num[0]];
for(int i=0; i<num.length-1; i++){
// 如果,i比i+1大的话,直接相加
if(graph[num[i]] >= graph[num[i+1]]){
sum += graph[num[i+1]];
}
// 如果i比i+1小的话,则将总和sum减去i这个地方数的两倍,同时加上i+1
// 就相当于后边的数比左边的数大,则用右边的数减左边的数
else{
sum = sum + graph[num[i+1]] - 2*graph[num[i]];
}
}
return sum;
}
}