LeetCode之--罗马数字转整数

141 阅读2分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。

前言

最近参加了2022年三月份的蓝桥杯比赛,所以计划学习算法和数据结构相关知识,但是平时都是学习不持续,所以希望借此机会来学习此知识点。因为我是在校大三学生,所以后续的算法相关代码都是使用js语言来进行完成。本文更新的是leetcode算法题之--罗马数字转整数。

题目

罗马数字包含以下七种字符: I, V, X, LCD 和 M

image.png 例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

image.png

示例

image.png

image.png

image.png

image.png

image.png

题解

/**

  • @param {string} s

  • @return {number} */

var romanToInt = function(s) {

var arr = s.split("");//split表示将字符串分割成数组;split("")表示无分割空格
var count=0;
var hash={//用hash表来表示这7个字母的数值

    'I':1,
    
    'V':5,
    'X':10,
    'L':50,
    'C':100,
    
    'D':500,
    'M':1000,
}

for(var i = 0;i<arr.length;i++){//遍历循环

    if(hash[arr[i]]<hash[arr[i+1]]){//如果右边数值比左边大,用右边数值-左边数值=count值
    
        count = count+hash[arr[i+1]]-hash[arr[i]];
        i=i+1;//下标前移

    }else{//如果右边数值比左边小,那么直接左右数值相加,即左+右=count值
        count=count+(hash[arr[i]]);
    }
}
return count;

};

分析

用hash表来进行封装七个字母对应的数值,然后在用for循环来遍历和比较大小并输出。