题目链接如下:Leetcode 013
大致描述一下题目:
讲一个罗马数字转化成整数,题目限制数字在1-3999之间
罗马数字有如下7个字符'I','V','X','L','C','D','M',分别代表1,5,10,50,100,500,1000
解题思路:
查阅了一些资料,了解到罗马数字转化成整数的一些规则
1. 相同数字连写n次,表示这个数字自加n次
2. 小的数字在右边,则两个数相加
3. 小的数字在左边(仅限I,X,C),则两个数相减
所以就判断相邻两个字符的大小关系,然后确定是相加还是相减
附上代码如下(C++):
/*******************************************************************************
Copyright © 2018-20xx Qiao Chuncheng, All Rights Reserved.
File name: 013[罗马数字转整数].cpp
Author: Qiao Chuncheng
Version: v1.0
Date: 2018-04-11
*******************************************************************************/
class Solution {
public:
int RomaCharToInt(char a)
{
char romaCh[8] = { 'I','V','X','L','C','D','M' };
int romaNum[8] = { 1,5,10,50,100,500,1000 };
for (int i = 0; i < 7; i++)
{
if (romaCh[i] == a)
return romaNum[i];
}
return -1;
}
int romanToInt(string s) {
int sum = RomaCharToInt(s[0]);
for (size_t i = 1; i < s.size(); i++)
{
int pre, cur;
pre = RomaCharToInt(s[i - 1]);
cur = RomaCharToInt(s[i]);
if (cur > pre)
sum += cur - 2 * pre;
else
sum += cur;
}
return sum;
}
};