前言:
这种题就是paper tiger,看起来文字非常多,但是做起来缺是非常简单,相信大家在高中时期就见过这种paper tiger了。
文字思想:
①将Symbol与value对应起来,使用switch-case或者HashMap都行。
②从左到右扫描输入串:
a)当前字符不小于直接后继:加上该symbol的value。
b)当前字符小于直接后继:减去该symbol的value。
例子:
当前待处理罗马字符串:MCMXCIV
当前记录总值:0
当前处理罗马字符:M, 其对应整型数:1000
当前处理罗马字符的直接后继字符:C, 其对应整型数:100
当前字符M >= 直接后继字符:C, 执行加操作
当前记录总值:1000
当前处理罗马字符:C, 其对应整型数:100
当前处理罗马字符的直接后继字符:M, 其对应整型数:1000
当前字符C < 直接后继字符:M, 执行加操作
当前记录总值:900
当前处理罗马字符:M, 其对应整型数:1000
当前处理罗马字符的直接后继字符:X, 其对应整型数:10
当前字符M >= 直接后继字符:X, 执行加操作
当前记录总值:1900
当前处理罗马字符:X, 其对应整型数:10
当前处理罗马字符的直接后继字符:C, 其对应整型数:100
当前字符X < 直接后继字符:C, 执行加操作
当前记录总值:1890
当前处理罗马字符:C, 其对应整型数:100
当前处理罗马字符的直接后继字符:I, 其对应整型数:1
当前字符C >= 直接后继字符:I, 执行加操作
当前记录总值:1990
当前处理罗马字符:I, 其对应整型数:1
当前处理罗马字符的直接后继字符:V, 其对应整型数:5
当前字符I < 直接后继字符:V, 执行加操作
当前记录总值:1989
最后一个字符单独处理:V, 执行加操作
当前记录总值:1994
代码:
复杂度:
时间复杂度:O(s.length)。空间复杂度:O(1)。
积累:
- 对于有一些没有规律的规则,要想到记录下来:数组记录、HashMap记录、if-else记录、switch-case记录。
- 整体。
推荐阅读:LeetCode刷题集合