一、题目链接
https://leetcode.cn/problems/roman-to-integer/
二、解题思路
三、实施步骤
四、Java程序
class Solution {
/**
* 返回七种基本罗马数字对应的阿拉伯数字
*
* @param romanDigit char类型的字符,代表一种基本罗马数字
* @return int类型的整数,代表romanDigit对应的阿拉伯数字
*/
public int getInt(char romanDigit) {
switch (romanDigit) {
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;
}
}
/**
* 将给定罗马数字转换为对应的阿拉伯数字
*
* @param s String类型的字符串,代表给定罗马数字
* @return int类型的整数,代表s对应的阿拉伯数字
*/
public int romanToInt(String s) {
int n = s.length(); // 罗马数字长度
char[] romanDigits = s.toCharArray(); // 将s转为字符数组处理
int ans = 0; // 计算结果,初始时为0
/* 遍历romanDigits数组的每一个基本罗马数字 */
for (int i = 0; i < n; i++) {
int current = getInt(romanDigits[i]); // 获取当前基本罗马数字对应的阿拉伯数字
if (i < n - 1) { // 如果当前基本罗马数字不是最后一个字符
int next = (getInt(romanDigits[i + 1])); // 获取后一个基本罗马数字对应的阿拉伯数字
if (next > current) { // 如果后一个阿拉伯数字较大
ans = ans + next - current; // 实际值用后一个阿拉伯数字减去当前的阿拉伯数字
i++; // 下一步不再考虑后一个基本罗马数字,跳过即可
}
else { // 否则,实际值就是当前的阿拉伯数字
ans = ans + current;
}
}
else { // 否则,当前基本罗马数字是最后一个字符,直接累加到ans上
ans = ans + current;
}
}
return ans;
}
}