算法学习自记录/罗马数字转整数

380 阅读1分钟

罗马数字转整数


题目

罗马数字包含以下七种字符:I、V、X、L、C、D和M

给定一个罗马数字,将其转换为整数

image.png


解答

我的分析

一句话总结题目

将罗马数字转换为整数。

特别注意特殊条件: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)

链接来源:leetcode.cn/problems/ro…