罗马数字转整数
题目
罗马数字包含以下七种字符:I、V、X、L、C、D和M。
给定一个罗马数字,将其转换为整数。
解答
我的分析
一句话总结题目
将罗马数字转换为整数。
特别注意特殊条件:I可以放在V(5)和X(10)的左边,来表示4和9等。
测试用例:
| 输入 | 输出 |
|---|---|
| 'III' | 3 |
| 'IV' | 4 |
自己的解法思路
1,分别将罗马数字和数字存在两个数组
2,通过一个个对比找到对应的整数值相加
3,特殊条件?暂时没想好怎么对比。
我的答案
暂无
标准答案
/**
* @param{string} s
* @return {number}
*/
var romanToInt = function(s) {
const symbolValues = new Map();
symbolValues.set('I', 1);
symbolValues.set('V', 5);
symbolValues.set('X', 10);
symbolValues.set('L', 50);
symbolValues.set('C', 100);
symbolValues.set('D', 500);
symbolValues.set('M', 1000);
let ans = 0;
const n = s.length;
for (let i = 0; i < n; ++i) {
const value = symbolValues.get(s[i]);
if (i < n - 1 && value < symbolValues.get(s[i + 1])) {
ans -= value;
} else {
ans += value;
}
}
return ans;
};
答案分析
一眼看
1,一般来说,罗马数字是从左往右依次减少的值,那么相邻的两位是左边的值是大于右边的。
2,特殊情况下,罗马数字左边小于右边。
接着分析
一般情况下,累加每个字符的对应值即可;例如:XXVII => 10+10+5+1+1 = 27;
特殊情况下,将其符号转化为符号(-)。例如:XIV => 10-1+5=14;
结论
自我总结
1,当存在‘x’与某个对应值一一对应时,哈希数组存储是不错方法。
2,注意题目条件成立的逻辑公式。一开始没有想到用减法,之后多注意。
引申思考
暂无
题目来源:力扣(LeetCode)