题目
原题链接
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
思路
TODO:之后添加
代码
class Solution {
/**
/// @brief: 规则如下
/// I(1),V(5),X(10),L(50),C(100),D(500),M(1000)
/// 右加左减
/// 在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。
/// 在一个较大的数字的左边记上1个较小的罗马数字,表示大数字减小数字
*/
func romanToInt(s: String) -> Int {
var result :Int = 0
var currIndex = s.endIndex
var currValue = 0 // 注意result = 0 其实看成了加上currValue的结果
while(currIndex != s.startIndex){
let prevIndex = currIndex.predecessor()
let prevValue = romanMapInt(s[prevIndex])
if(prevValue >= currValue){
result += prevValue
}else{
result -= prevValue
}
currIndex = prevIndex
currValue = prevValue
}
return result
}
func romanMapInt(c:Character)->Int{
switch(c) {
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;
}
}
}
网友评论