题目链接如下: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; } };