解法都在代码里,不懂就留言或者私信,这个是相对简单点的,感觉会在低职级面试的时候考
class Solution {
/**罗马数字转整数还是比较简单的,基本思路:把罗马数字字符串转成字符数组
同时创建一个int型数组,遍历罗马数字字符串然后把每一位转换为数字放入int型数组里
这个时候要注意不是简单的加的操作,如果当前位比后一位小说明这一位需要减去,比如IV是5-1而不是5+1
所以我们每一位都要和后面一位比较,除非后面没有了 */
public int romanToInt(String s) {
char[] sArr = s.toCharArray();
int[] num = new int[sArr.length];
for(int i = 0; i < sArr.length; i++) {
/**根据罗马数字当前字符给num中的对应位置赋值 */
switch(sArr[i]) {
case 'I':
num[i] = 1;
break;
case 'V':
num[i] = 5;
break;
case 'X':
num[i] = 10;
break;
case 'L':
num[i] = 50;
break;
case 'C':
num[i] = 100;
break;
case 'D':
num[i] = 500;
break;
case 'M':
num[i] = 1000;
break;
}
}
/**遍历数字数组生成答案 */
int ans = 0;
for(int i = 0; i < num.length; i++) {
/**已经是最后一位或者当前位比后一位大是加操作,否则是减操作 */
if(i == num.length - 1 || num[i] >= num[i+1]) {
ans += num[i];
} else {
ans -= num[i];
}
}
return ans;
}
}
这结果毫无疑问是最优解吧