12. Integer to Roman
题目
题目的意思很简单:将整数转为罗马数字表示。
解题思路
1、首先,先介绍一下罗马数字的7个基本单元“I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000)”。
2、接着让我们看一下数字转罗马数字的一些规则:
1)相同数字连写不超过3次。
2)小的数字在大的数字的左边时,表示大数减小数。但是小的数字仅限于I、X、C三个。所以除了上面7种还有的补充单元包括:IV(4)、IX(9)、XL(40)、XM(90)、CD(400)、CM(900)。
3)相减时不能跨两位相减。比如99不能够写成IC(100-1),而应该写成XCIX(100-10+(10-1))。
4)相加时,大数在小数的左边。
3、根据上述规则,解题的思路如下:
1)构建两个数组:roNum存放{“I”,”IV”,”V”,”IX”,”X”,”XL”,”L”,”XC”,”C”,”CD”,”D”,”CM”,”M”};inNum存放{1,4,5,9,10,40,50,90,100,400,500,900,1000}。
2)将数字依次与inNum中的数字进行比较,注意是从inNum中从后往前进行比较。如果大于当前索引位置的值,则保存当前索引位置对应的罗马数字。比如520,那么先将D存下来。
3)将原数字更新值为减去刚存的罗马数字的值,即520-500=20。继续往下比较。直到将inNum的全部数字遍历完毕。返回存储的罗马字符串。