【算法】LeetCode算法题-Roman To Integer
这是悦乐书的第145次更新,第147篇原创
今天这道题和罗马数字有关,罗马数字也是可以表示整数的,如“I”表示数字1,“IV”表示数字4,下面这道题目就和罗马数字有关,你能猜到吗?
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第4题(顺位题号是17),给定一组罗马数字组成的字符串,将其转换为整数。
罗马数字包含下面7个字符:
符号 值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
下面是些小例子,帮助我们更好理解组合规则。
输入: “III”
输出: 3
输入: “IV”
输出: 4
输入: “LVIII”
输出: 58
说明: L = 50,V = 5,III = 3。
输入: “MCMXCIV”
输出: 1994
说明: M = 1000,CM = 900,XC = 90,IV = 4。
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 分析题目
罗马数字通常从左到右从最大到最小排列,大数字在前做加法,小数字在前做减法。
V在I的前面就是V+I=5+1=6,X在I的前面就是X+I=10+1=11
L在X的前面就是L+X=50+10=60,C在X的前面就是C+X=100+10=110
D在C的前面就是D+C=500+100=600,M在C的前面就是M+C=1000+100=1100
I在V的前面就是V-I=5-1=4,I在X的前面就是X-I=10-1=9
X在L的前面就是L-X=50-10=40,X在C的前面就是C-X=100-10=90
C在D的前面就是D-C=500-100=400,C在M的前面就是M-C=1000-100=900
理解这些后,我们第一步是要将基础字符和所代表的数字存起来,这种类似键值对的组合,很容易让人联想到HashMap。
第二步就需要获取传入的字符串每个字符所代表的数字是什么,同时还要判断相邻两位字符所表示数字的大小关系,因为这决定着求总数的时候是做加法还是做减法。
第三步需要加上最后一位字符所表示的数字,因为相邻两位做比较,最后一次比较的是倒数第二位和倒数第一位,求和(差)只是算到了倒数第二位,所以在循环结束后,需要加上最后一位的值。因为最后一位字符后面再无其他字符,所以只能做加法。
public static int romanToInt(String s) {
int result = 0;
Map<Character, Integer> map = new HashMap<Character, Integer>();
map.put('I', 1);
map.put('V', 5);
map.put('X', 10);
map.put('L', 50);
map.put('C', 100);
map.put('D', 500);
map.put('M', 1000);
if (s.length() == 0) {
return 0;
}
char[] arr = s.toCharArray();
int i=0, j=1;
for (; i<arr.length-1; i++,j++) {
if (map.get(arr[i]) >= map.get(arr[j])) {
result += map.get(arr[i]);
} else {
result -= map.get(arr[i]);
}
}
result += map.get(arr[i]);
return result;
}
03 小结
今天这道题还是比较简单的,弄清楚罗马数字的规则后,只需要将其演绎成相应代码即可。
如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
本文首发于我的个人公众号:悦乐书,转载请注明出处!
【算法】LeetCode算法题-Roman To Integer的更多相关文章
- 乘风破浪:LeetCode真题_013_Roman to Integer
乘风破浪:LeetCode真题_013_Roman to Integer 一.前言 上一节我们讨论了如何把阿拉伯数字转换成罗马数字,现在我们需要思考一下如何把罗马数字转换成阿拉伯数字,其实我们仔细观擦 ...
- 乘风破浪:LeetCode真题_008_String to Integer (atoi)
乘风破浪:LeetCode真题_008_String to Integer (atoi) 一.前言 将整型转换成字符串,或者将字符串转换成整型,是经常出现的,也是必要的,因此我们需要熟练的掌握,当然也 ...
- 《LeetBook》leetcode题解(13):Roman to Integer[E]
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- 【LeetCode】13. Roman to Integer (2 solutions)
Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within t ...
- C# 写 LeetCode easy #13 Roman to Integer
13.Roman to Integer Roman numerals are represented by seven different symbols: I, V, X, L, C, D and ...
- leetcode第13题--Roman to Integer
Problem: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range ...
- 【leetcode刷题笔记】Integer to Roman
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...
- (算法)LeetCode刷题
LeetCode 56 合并区别 Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. 关键就是a[1]>=b[0] 也就 ...
- 【一天一道LeetCode】#13. Roman to Integer
一天一道LeetCode系列 (一)题目 Given a roman numeral, convert it to an integer. Input is guaranteed to be with ...
随机推荐
- lwIP 2.0.3 移植笔记(基于 STM32 + μC/OS-II)
本次实验参考自原子已经移植好的 LWIP(版本:1.4.1)模板来进行的,感谢! 由于要做的一个小项目要用到网络通信,而且想要加上 UC/OS-II 跑个系统,感觉 LWIP 这个轻量级的 IP 协议 ...
- asp.net-基础-20180320
常用页面指令 <%@page%>:一个页面只能有一个 <%@Import NameSpace=“Value“%> 导入命名空间 <%@OutputCache%> 设 ...
- spring_06装配bean_2
一.前言 1.自动装配尽量不要用,不如使用set明确 二. 通过构造函数注入值(Bean中可以没有get,set方法) <bean id="emp" class=" ...
- HTTP与HTTPs的区别?
简而言之: HTTPS = HTTP + SSL HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头 HTTP 是不安全的,而 HTTPS 是安 ...
- xshell工具source导入几个G的数据库
直奔主题 xshell工具source导入几个G的数据库 1.先把sql文件通过ftp或者winscp上传到服务器对应站点根目录,如图所示 2.进入xshell界面,进入数据库之前一定设定编码,否者会 ...
- C#导入Excel、Excel导入、导入.xls 、导入.xlsx、Excel2003版本、Excel2007版本
C#导入Excel: 1.选择Excel 03版文件 2.选择需要读取数据的Excel工作表 3.选择工作表中需要读取的列 源码地址在图片下面,不要点击图片,点击下载地址跳转下载.
- 2018-01-02 JavaScript实现ZLOGO: 用语法树实现多层循环
原址: https://zhuanlan.zhihu.com/p/32571516 照例先上演示弱效果图. 演示地址照旧: 代码如下: 开始 循环4次 循环4次 前进50 左转90度 到此为止 右转9 ...
- 电脑GIF动图制作方法图文详解
我们在电脑上可以看到很多动态图,有趣的.搞笑的.可爱的等等,只要我们要用哪种类型的,网上应有尽有,但是想不想自己制作图片呢?今天我们就来学习一下GIF动图制作的方法. 使用工具: 电脑 操作方法: 1 ...
- 微信小程序开发之初探
本文是以一个简单的小例子,来简要讲解微信小程序开发步骤,希望促进学习分享. 概念 微信小程序,简称小程序,缩写xcx,英文mini program.是一种不需要下载安装即可使用的应用,它实现了应用“触 ...
- Python高级特性:列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 最常见的例子: 生成list [, , , , , , , , , ]可以用li ...