未验证 提交 417a474b 编写于 作者: K KEQI HUANG 提交者: GitHub

Update 012._Integer_to_Roman.md

上级 67f0ce83
......@@ -25,43 +25,12 @@ Medium
I V X L C D M
```
组合是这种方式
```
1 2 3 4 5 6 7 8 9
I II III IV V VI VII VIII IX
10 20 30 40 50 60 70 80 90
X XX XXX XL L LX LXX LXXX XC
100 200 300 400 500 600 700 800 900
C CC CCC CD D DC DCC DCCC CM
```
可以看出来,这个进位或者组合是4和9的地方进位的,比如4是加上了I然后到V,9是加上了I到X。所以题目要限制数字在1-3999之间。
然后就去谷歌罗马数字最大能表示多少,看到了一个更好的总结,不过是可以更大的,数字上面加bar.
via <http://www.cnblogs.com/cacique/archive/2012/02/23/2364377.html>
下面是几个通常的规则来构成罗马数字:
- 大部分时候用字符相叠加来表示数字。I是1, II是2, III是3。VI是6(挨个看来,是“5 和 1”的组合),VII是7,VIII是8。
- 含有10的字符(I,X,C和M)最多可以重复出现三个。为了表示4,必须用同一位数的下一个更大的数字5来减去一。不能用IIII来表示4,而应该是IV(意思是比5小1)。40写做XL(比50小10),41写做XLI,42写做XLII,43写做XLIII,44写做XLIV(比50小10并且比5小1)。
- 有些时候表示方法恰恰相反。为了表示一个中间的数字,需要从一个最终的值来减。比如:9需要从10来减:8是VIII,但9确是IX(比10小1),并不是VIII(I字符不能重复4次)。90是XC,900是CM。
- 表示5的字符不能在一个数字中重复出现。10只能用X表示,不能用VV表示。100只能用C表示,而不是LL。
- 罗马数字是从左到右来计算,因此字符的顺序非常重要。DC表示600,而CD完全是另一个数字400(比500小100)。CI是101,IC不是一个罗马数字(因为你不能从100减1,你只能写成XCIX,表示比100小10,且比10小1)。
**规则总结:  左减右加    加减时位数和被加减数相差位数最大为一(两位数可加减一位数 三位数只能加减两位数)  从左向右计数**
[Leetcode 013]()
所以想着4,9这块需要特殊处理一下,但是看到了一个很棒的[算法](https://gist.github.com/imilu/00f32c61e50b7ca296f91e9d96d8e976)
AC代码
```python
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册