2021.11.16 每天进步一点点:力扣算法题13

这里写目录标题

题目介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


思路

举几个例子:

给出的罗马数字输出的值
I1
II2
III3
VI6
XII12
MVI1006

就此可以看出,把罗马数字每个字符单独拆分开来,转换成对应数字,再相加,就是最终结果。

但是,题目中给出了几种特殊情况

给出的罗马数字输出的值
IV4
IX9
XL40
XC90
CD400
CM900

对特殊情况举几个例子:

给出的罗马数字输出的值
CDVI406
CMIX909

可以得出一个结论:

当存在特殊情况时,字符不应该被拆分开,而是作为一个整体来转变成数字的。如果单独拆开得出对应的数字,再进行相加,只会得出错误的结果。

那么,我们就必须找一个字符来代替这个整体,用于最终数字计算。

比如用n来代替CD,那么 CDVI就可以写作nVI

这时候的n就是400,就可以逐个字符拆开来,再相加,得出最终结果。


代码
/**
 * @param {string} s
 * @return {number}
 */
var romanToInt = function(s) {
     // 把所有特殊情况的整体字符串,都替换成单个字符   
    let st = 
        s.replace(/III/g, 'r') 
        .replace(/II/g, 'k') 
        .replace(/IV/g, 'a')
        .replace(/IX/g, 'b')
        .replace(/XL/g, 'f')
        .replace(/XC/g, 'h')
        .replace(/CD/g, 'n')
        .replace(/CM/g, 'y');
    
    // 把字符串转换成数字
    const trans = function(str) {
        switch(str) {
            case 'I':
                return 1;
            case 'k':
                return 2;
            case 'r':
                return 3;
            case 'a':
                return 4;
            case 'V':
                return 5;
            case 'b':
                return 9;
            case 'X':
                return 10;
            case 'f':
                return 40;
            case 'L':
                return 50;
            case 'h':
                return 90;
            case 'C':
                return 100;
            case 'n':
                return 400;
            case 'D':
                return 500;
            case 'y':
                return 900;
            case 'M':
                return 1000;
            default:
                return 0;
        }
    }
	// 遍历相加
    let result = 0;
    for(let v of st) {
        result += trans(v);
    }
	// 返回结果
    return result;
};

提交结果

在这里插入图片描述


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值