问题
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
给定一个罗马数字,将其转换为阿拉伯数字,输入的范围为1-399分析
1.先补充一下罗马数字的知识:
(1)连写的数字重复不超过三次,比方说要表示4,就不能是III,而应该是IV;
(2)如果小的数字,它在大的数字的左边,那儿它所表示的数等于大数减小数得到的数,比如:IV = 4;IX = 9;
(3)常用的罗马数字和阿拉伯数字之间的映射:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000)
2.所给的罗马数字,使用字符串来表示,其中的每一个字符对应一个阿拉伯数字,罗马数字到阿拉伯数字的转换过程,可以看做将每一个字符对应的阿拉伯数字进行求和,其中,要注意,当前字符所对应的阿拉伯数字如果小于后面一位字符对应的阿拉伯数字,那么就需要减去当前字符对应的阿拉伯数字,返回,则加上当前字符对应的阿拉伯数字。
代码
class Solution {
//实现将罗马数字转换为阿拉伯数字
//输入:s为需要被转换的罗马数字
//输出:转换为阿拉伯数字后的结果
public int romanToInt(String s) {
int len = s.length();
int[] tran = new int[len];//将每一位字符对应的阿拉伯数字按照顺序存放在数组中
char temp;
int res = 0;
for(int i = 0; i <len;i++)
{
temp = s.charAt(i);
if(temp == 'M')
tran[i] = 1000;
if(temp == 'D')
tran[i] = 500;
if(temp == 'C')
tran[i] = 100;
if(temp == 'L')
tran[i] = 50;
if(temp == 'X')
tran[i] = 10;
if(temp == 'V')
tran[i] = 5;
if(temp == 'I')
tran[i] = 1;
}
for(int j = 0;j <len - 1;j++)
{
//将当前值与下一位进行比较,当前值小于下一位值,那么需要减去当前值。
if(tran[j] < tran[j+1])
tran[j] = tran[j] * -1;
res += tran[j];
}
res += tran[len -1];
return res;
}
}