String:13. Roman to Integer
来源:互联网 发布:360软件推广联盟 编辑:程序博客网 时间:2024/06/07 21:01
罗马数字共有7个,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。
1、重复数次:一个罗马数字重复几次,就表示这个数的几倍。2、右加左减:
2.1 在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。
2.2 在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。
2.3 左减的数字有限制,仅限于I、X、C。比如45不可以写成VL,只能是XLV
2.4 但是,左减时不可跨越一个位数。比如,99不可以用IC(100 - 1)表示,而是用XCIX([100 - 10] + [10 - 1])表示。(等同于阿拉伯数字每位数字分别表示。)
2.5 左减数字必须为一位,比如8写成VIII,而非IIX。
2.6 右加数字不可连续超过三位,比如14写成XIV,而非XIIII。(见下方“数码限制”一项。)
class Solution {public: int romanToInt(string s) { map<char, int> m = {{'I', 1},{'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}}; int result = 0; for(int i = 0; i < s.size(); ++i) { //cout << s[i] << ":"; if(i == 0) { result += m[s[i]]; continue; } if(m[s[i]] > m[s[i - 1]]) { result -= 2 * m[s[i - 1]]; result += m[s[i]]; } else { result += m[s[i]]; } //cout << result << endl; } return result; }};我的方法……贼笨。遍历一遍字符串,如果这个字符比上一个字符小,就加到result里面,如果这个字符比上一个字符大,说明上一个字符应该减掉的,但是上一轮加上了,所以减去两倍的上个字符表示的大小,再加上这个字符大小。
和我的方法一样但是写的更好的代码,是从后往前遍历,最后一个字母一定是加的,所以省掉了判断 i == 0 的一步。更简洁也更有效率。
int romanToInt(string s) { unordered_map<char, int> T = { { 'I' , 1 }, { 'V' , 5 }, { 'X' , 10 }, { 'L' , 50 }, { 'C' , 100 }, { 'D' , 500 }, { 'M' , 1000 } }; int sum = T[s.back()]; for (int i = s.length() - 2; i >= 0; --i) { if (T[s[i]] < T[s[i + 1]]) { sum -= T[s[i]]; } else { sum += T[s[i]]; } } return sum;}
阅读全文
0 0
- String:13. Roman to Integer
- Leetcode - String - Roman to Integer/Integer to Roman
- 13. Roman to Integer
- 13.Roman to Integer
- 13. Roman to Integer
- 13.Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- linux 和我 二(联网)
- zabbix上监控docker
- Java-LinkedHashMap整理
- jni访问java方法
- Android下uid与多用户释疑
- String:13. Roman to Integer
- HDU --- 5904 LCIS 【思维 + 简单dp】
- MySQL 卸载与安装
- [SDUT](2117)数据结构实验之链表二:逆序建立链表 ---链式存储(线性表)
- 关于win7不识别maxon驱动器的解决办法
- 免安装的mysql配置
- .Net时间计算函数,统计某一天是一年的第几周,这一周从哪天开始到哪天结束
- @RequestMapping 用法详解之地址映射
- Java-HashSet/LinkedHashSet整理