Leetcode--Roman to Integer
来源:互联网 发布:淘宝下载新版下载安装 编辑:程序博客网 时间:2024/06/10 23:09
Problem Description:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
分析:题目的意思是将罗马数字转化成整数,首先是在网上找到关于罗马数字表示法的规则如下:1、计数方法:① 罗马数字就有下面七个基本符号:Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、L(50)、C(100)、D(500)、M(1000)。
② 相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;XX=20;CC=200;MMM=3000;
③ 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
④ 小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
⑤ 正常使用时连写的数字重复不得超过三次;
2、组数规则: ① 基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个。
② 不能把基本数字V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目;
③ V 和X 左边的小数字只能用Ⅰ。
④ L 和C 左边的小数字只能用X。
⑤ D 和M 左边的小数字只能用C。
还有一些规则是当整数大于3999时需要考虑的,这个题目就不用考虑了。依照上述规则,可以看出罗马数字计数法转化成整数时如果当前的数字temp小于等于左边的数字last,则直接相加;否则应该加上temp-2*last;按照这一规则,写出转化代码如下:
class Solution {public: int rtoi(char ch) { switch(ch){ case 'I':return 1; case 'V':return 5; case 'X':return 10; case 'L':return 50; case 'C':return 100; case 'D':return 500; case 'M':return 1000; default:return 0; } } int romanToInt(string s) { int res=0; if(s.empty()) return 0; int temp,last; temp=rtoi(s[0]); last=temp; res+=last; for(int i=1;i<s.size();++i) { temp=rtoi(s[i]); if(temp<=last) res+=temp; else res+=temp-2*last; last=temp; } return res; }};
- LeetCode Roman to Integer && Integer to Roman
- 【leetcode】Roman to Integer | Integer to Roman
- Leetcode - "Roman to Integer" & "Integer to Roman"
- LeetCode:Roman to Integer,Integer to Roman
- LeetCode Integer to Roman & Roman to Integer
- leetcode - roman to integer & integer to roman
- LeetCode:Roman to Integer
- LeetCode: Integer to Roman
- LeetCode: Roman to Integer
- LeetCode Integer to Roman
- LeetCode: Integer to Roman
- LeetCode : Roman to Integer
- [Leetcode] Roman to Integer
- [Leetcode] Integer to Roman
- Leetcode: Integer to Roman
- Leetcode: Roman to Integer
- LeetCode Integer to Roman
- 【leetcode】Roman to Integer
- hdu 1152 Brownie Points I
- ElasticSearch集群安装及配置方法
- html常用标签2
- 耿建玲SQL视频总结
- windows下,Python中获取本地磁盘卷标的方法
- Leetcode--Roman to Integer
- 旋转数组的最小数字
- 从Javaweb到Android的尝试
- PAT1077. Kuchiguse (20)
- C++程序设计(3)之程序设计初步
- Linux错误码查看
- 黑马程序员_Hashtable和Hashmap
- Java面试题---交通灯系统管理系统
- 在MFC对话框程序中使用加速键