问题
String#roman2Int
给 String
定义一个私有的扩展方法 roman2Int
:
1 | private fun String.roman2Int():Int{ |
单元测试
1 |
|
解法
由题目可以得出:
- 罗马数字由
I、V、X、L、C、D、M
构成 - 当小值在大值得左边,则减小值
- 当小值在大值的右边,则加小值
由以上结论可以得出,右值永远为正,最后一位必为正
码表:
key | value |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
代码实现小技巧,从第1位开始遍历,比较 cur
和 pre
的大小,从而确定是做加法还是减法,然后更新 pre 的值。只有最后一位时,做加法。
代码如下:
1 | /** |