13.罗马数字转整数

解题思路:

1.首先 既然是罗马转阿拉伯数字 那就是接受参数无外乎是字符串的 ‘I’,’V’,’X’,’L’,’C’,’D’,’M’

2.然后将接受的字符串 转换成 字符数组

3.接下来很自然的用到 switch() ,将罗马数字按照依次判断,然后将对应的阿拉伯数组 放在对应整形数组中

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。

4.IV是表示4 , 相当于 V 减去 前面的 I,这样就可以转换阿拉伯数字后,按照这样运算就能求出正确结果,只需要判断 if(num[n] < num[n+1]) 如果成立,则需要减去 num[n] 的数,如果不成立则需要把 num[n] 加进sum

5.最后再累加整形数组中的最后一位元素,返回sum

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution {
public int romanToInt(String s) {
char[] chararray = new char[s.length()];
int[] intarray = new int[s.length()];
chararray = s.toCharArray();
for (int i =0; i<s.length(); i++){
switch (chararray[i]){
case 'I': intarray[i] = 1;
break;
case 'V': intarray[i] = 5;
break;
case 'X': intarray[i] = 10;
break;
case 'L': intarray[i] = 50;
break;
case 'C': intarray[i] = 100;
break;
case 'D': intarray[i] = 500;
break;
case 'M': intarray[i] = 1000;
break;
}
}
int sum = 0;
for (int j=0; j<s.length()-1; j++){
if (intarray[j]<intarray[j+1]){
sum -= intarray[j];
}else{
sum += intarray[j];
}
}
sum += intarray[s.length()-1];
return sum;
}
}
时间复杂度 空间复杂度
$O(n)$ $O(n)$