leetcode算法刷题记录之罗马数字转整数
题目描述:
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
示例 1:
输入: "III"
输出: 3
示例 2:
输入: "IV"
输出: 4
示例 3:
输入: "IX"
输出: 9
示例 4:
输入: "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.
示例 5:
输入: "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.
提示:
题目所给测试用例皆符合罗马数字书写规则,不会出现跨位等情况。
IC 和 IM 这样的例子并不符合题目要求,49 应该写作 XLIX,999 应该写作 CMXCIX 。
关于罗马数字的详尽书写规则,可以参考 罗马数字 - Mathematics 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/roman-to-integer
题解:
1.解题:利用map
var romanToInt = function(s) {const map = {'I': 1,'IV': 4,'IX': 9,'V': 5,'X': 10,'XL': 40,'XC': 90,'L': 50,'C': 100,'CD': 400,'CM': 900,'D': 500,'M': 1000}var dList = ['IV', 'IX', 'XL', 'XC', 'CD', 'CM'],num = 0,sNext;var i = 0while (i <= s.length - 1) {sNext = s.charAt(i) + s.charAt(i + 1)if (dList.indexOf(sNext) !== -1) {num += map[sNext];i = i + 2} else {num += map[s.charAt(i)];i++}}return num;};
2.解题:利用switch
var romanToInt = function(s) {var num = 0;for (var i = 0; i < s.length; i++) {var nextI = s.charAt(i + 1);switch (s.charAt(i)) {case 'I':if (nextI === 'V') {num += 4i = i + 1} else if (nextI === 'X') {num += 9i = i + 1} else {num += 1}break;case 'V':num += 5break;case 'X':if (nextI === 'L') {num += 40i = i + 1} else if (nextI === 'C') {num += 90i = i + 1} else {num += 10}break;case 'L':num += 50break;case 'C':if (nextI === 'D') {num += 400i = i + 1} else if (nextI === 'M') {num += 900i = i + 1} else {num += 100}break;case 'D':num += 500break;case 'M':num += 1000break;}}return num;};
leetcode算法刷题记录之罗马数字转整数相关推荐
- Ants (POJNo.1852)--数据结构与算法刷题记录
数据结构与算法刷题记录1 时间:4.28 这是第一次用CSDN来记录自己的学习成果,在此留下纪念,希望自己能够坚持下去,变得更强. 本次学习记录来源于<挑战程序设计竞赛(第2版)> Ant ...
- LeetCode算法刷题目录 (Java)
目录 1.数学基础 1.1.位运算 1.2.其它 2.数据结构 2.1.线性表 2.1.1.数组(双指针) 2.1.2.链表(双指针) 2.1.3.栈 2.1.4.队列 2.1.5.字符串 2.1.6 ...
- LeetCode算法刷题-URL化和重新排列字符串
LeetCode刷题-URL化 面试题01.03 URL化 题目 URL化.编写一种方法,将字符串中的空格全部替换为%20.假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的"真实& ...
- LeetCode刷题13-简单-罗马数字转整数
文章目录 前言 一.题目描述 二.题目解析 三.代码 结语 前言 算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题! 第一遍,不求最优解,但求能过!!!
- 数据结构与算法刷题记录
数据结构与算法&程序语言 学习物料汇总: leetcode&牛客网 流畅的python 书签&网络搜索 leetcode 数据结构 数组 链表 栈&队列 字符串 算法 ...
- 岛屿最大面积 leetcode Java_LeetCode刷题记录——岛屿的最大面积
题目描述: 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被水包围着. 找到给定 ...
- 算法刷题记录(Day 33)
Balanced Lineup(poj 3264) 原题链接 题目类型:RMQ.ST表 RMQ视频讲解 RMQ以及ST表 存在的问题: 1.2的幂次应该如何计算->打表 2.log2 x转化为l ...
- leetcode算法算题记录-数组--二分查找
public class 二分查找 {//注: 数组为有序数组且数组中无重复元素是使用二分法的前提//704.二分查找 简单//给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 ta ...
- 算法刷题记录(Day 16)
棋局评估(csp 201803-4) 题目类型:博弈论.dfs.最大最小搜索 思路一:去模拟下棋,Alice和Bob轮流下棋,每次使用"最优策略"来决定下在哪里. "最优 ...
最新文章
- pytorch 加载不对齐预训练
- 5 Android数据存储 任务二 应用程序数据文件夹里的文件读写 ,
- Android 任意区域截屏
- struct结构体初始化3种方法
- LINUX系统服务总结之三:nis服务器全集
- lua运行外部程序_Lua 协同程序(coroutine)
- nginx编译安装和yum安装那个更好?
- awk去除行首行尾空格
- 【Oracle】Oracle错误编码大全
- 信息系统项目管理师 - 必考记忆口诀
- 影驰悍将120SSD盘只认20M,有时能认,有时认不到的修复
- phpstudy中的站点突然无法打开,明明路径打对也无法打开,解决办法
- Why Transformer works
- Python爬虫面试简历 经验分析
- css锚点定位不准确问题
- 魅族缘何成为双十一最冰火手机厂商
- 电路板参数有哪些参数
- componentWillUnmount父子组件触发先后
- php里面substr函数,PHP substr()函数
- Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null objec
热门文章
- win7 X64位安装hp激光打印机驱动
- 乐观锁和悲观锁的理解及如何实现,乐观锁的实现方式。看完你就明白了!
- 圆的半径和面积c语言流程图,设计一个算法:输入圆的半径 输出圆的面积
- odoo报错:from google.ads.googleads.client import GoogleAdsClient ModuleNotFoundError: No module named
- 中国品牌如何做海外营销?
- 1075: 聚餐人数统计 C语言
- [访客必读]麒麟子的故事
- B.FRIENDit壁虎忍者电竞游戏耳机CH3 耳麦7.1发光震动
- Gif动态图片库--GifView的基本使用
- Facebook 发币后的 48 小时