十进制整数转罗马数字 – 罗马数字转十进制整数

IntToRoman 和 RomanToInt 两个不错的题,搞成模板不错。

12. Integer to Roman

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

 

13. Roman to Integer

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

 

先上代码后讲题。

 

第十二题手动打表,然后一一匹配即可。

 

十三题我先用的查找比较慢,后来发现是可以一次遍历的。

 

应该还有优化空间,不过应该不需要吧。快不了多少了。

今天又试了下优化,这样看起来爽多了。

 

简单规则解析:

罗马数字采用七个罗马字母作数字,即:

  • Ⅰ 1
  • X 10
  • C 100
  • M 1000
  • V 5
  • L 50
  • D 500
记数的方法如下:
  1. 相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;
  2. 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;
  3. 小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;
  4. 在一个数的上面画一条横线,表示这个数增值 1,000 倍(这里不需要)
组数规则,有两条须注意掌握:
  1. 基本数字 Ⅰ、X 、C 中的任何一个、自身连用构成数目、或者放在大数的右边连用构成数目、都不能超过三个;放在大数的左边只能用一个;
  2. 不能把基本数字 V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目、只能使用一个;

其实我觉得这两个题目,做成模板拿来用是最好了,没啥难度,也好掌握。

 

C++版的用python改改就好了…(⊙﹏⊙)b

【LeetCode】12. Integer to Roman & 13. Roman to Integer
Tagged on:     
0 0 投票数
Article Rating
订阅评论
提醒

0 评论
内联反馈
查看所有评论