LeetCode 13 罗马数字转整数 - 按规则处理

LeetCode 13 罗马数字转整数,和第 12 题反过来,规则就一条:小的在大的左边就减。


🟢 罗马数字转整数

"III" → 3,"IV" → 4,"LVIII" → 58


罗马数字多数情况大数在左小数在右,加起来就行。例外是小在大左(IV、IX),此时小数要减掉。遍历时当前值小于下一位就减,否则加。

java 复制代码
public int romanToInt(String s) {
    int res = 0;
    for (int i = 0; i < s.length(); i++) {
        int cur = map(s.charAt(i));
        int next = i + 1 < s.length() ? map(s.charAt(i + 1)) : 0;
        res += cur < next ? -cur : cur;
    }
    return res;
}
private int map(char c) {
    return switch (c) {
        case 'I' -> 1; case 'V' -> 5; case 'X' -> 10;
        case 'L' -> 50; case 'C' -> 100; case 'D' -> 500; case 'M' -> 1000;
        default -> 0;
    };
}

七种字符映射用 switch 比 HashMap 快。最后一位没有 next 取 0,cur > 0 肯定走加的分支。


这道题你踩过什么坑?或者你用别的语言实现过吗?评论区聊聊,回头复习也方便翻。

相关推荐
HideF1 天前
Linux sudo
linux
FlightYe1 天前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
蹊黎1 天前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
知已难寻1 天前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
huainingning1 天前
Windows syslog日志服务器搭建与模拟器对接
运维·服务器·智能路由器
牛马鸡niumasi1 天前
【Linux】C语言文件操作
linux
say_fall1 天前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
文丑颜不良啊1 天前
LeetCode1661~1680题目解析
java·leetcode
wacsii1 天前
【Linux进程(一)】Linux 进程初探:操作系统如何管理进程?fork() 为什么返回两次?
linux·运维·服务器
共享家95271 天前
408 操作系统第一章
服务器·数据库·windows