【Leetcode】Roman to Integer题解

用JS的思路去解这道题

  • 首先采用Map存储罗马字对应的数字值关系,Map与Object相比,区别如下所示
  1. 一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。
  2. Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是。
  3. Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
  4. Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。
  • 创建romanToInt函数对字符串s从尾部开始,一个个取出单个字符char,通过Map对象roman映射找到对应的数字,如果当前值num小于之前的值lastint,则总和total为当前total值减num,否则total为当前total值加num,当前遍历结束后,将num赋值给lastint
/**
 * @param {string} s
 * @return {number}
 */
var roman = new Map([
    ['I', 1],
    ['V', 5],
    ['X', 10],
    ['L', 50],
    ['C', 100],
    ['D', 500],
    ['M', 1000],
])
var romanToInt = function(s) {
    if (!s) return 0;
    let num = lastint = total = 0;
    for (let i = 0, len = s.length; i < len; i++) {
         let startIndex = len - (i+1)
         let endIndex = len - i
         let char = s.slice(startIndex, endIndex)
         let num = roman.get(char);
         if (num < lastint) {
             total = total - num;
         } else {
             total = total + num
         }
         lastint = num
    }
    return total
};

git仓库地址

git仓库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值