大体思路就是遍历字符串中的每一个字符,并且让当前字符对应的数字大小与之前的数字相比较,如果比前一个数大的话那就减去前一个数,如果比前一个数小的话就加上前一个数,直到最后一个字符,最后一个字符就可以直接加了
时间复杂度:O(N),只遍历一次数组
空间复杂度:O(1),只用了常数级别的空间
- 代码实现:
class Solution {
public int romanToInt(String s) {
if(s == null){
return 0;
}
int res = 0;
int temp = 0;
for(int i = 0;i < s.length();i++){
int n = getValue(s.charAt(i));
if(i != 0){
if(temp < n){
res = res - temp;
}else{
res = res + temp;
}
}
temp = n;
}
res = res + getValue(s.charAt(s.length() - 1));
return res;
}
public int getValue(char a){
switch(a){
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;
}
}
}
网友评论