From 417a474b080b38853a1f8fff297c1e28cbb25424 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 22 Feb 2018 15:26:45 -0600 Subject: [PATCH] Update 012._Integer_to_Roman.md --- 012._Integer_to_Roman.md | 33 +-------------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/012._Integer_to_Roman.md b/012._Integer_to_Roman.md index 529a323..df577b5 100644 --- a/012._Integer_to_Roman.md +++ b/012._Integer_to_Roman.md @@ -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 - -下面是几个通常的规则来构成罗马数字: - -- 大部分时候用字符相叠加来表示数字。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 -- GitLab