13.|13. Roman to Integer
题目分析
Given a roman numeral, convert it to an integer.
【13.|13. Roman to Integer】Input is guaranteed to be within the range from 1 to 3999.
做这道题目必须知道一个原则,罗马数字中如果左边的数字小于右边的数字,则要右边的数字减去左边的数字,时间复杂度为 O(n),空间复杂度为 O(1)。
代码
class Solution {
public int romanToInt(String s) {
if(s == null || s.length() == 0) return 0;
int res = toNumber(s.charAt(0));
for(int i = 1;
i < s.length();
i++) {
int valRight = toNumber(s.charAt(i));
int valLeft = toNumber(s.charAt(i - 1));
if(valRight > valLeft) {
// 注意这里是减两倍的
// 可以这么理解,减第一个是做正常的减操作,减第二个是把之前多加的给减掉
res += valRight - 2 * valLeft;
} else {
res += valRight;
}
}
return res;
}public int toNumber(char c) {
int res = 0;
switch(c) {
case 'I' : return 1;
case 'V' : return 5;
case 'X' : return 10;
case 'L' : return 50;
case 'C' : return 100;
case 'D' : return 500;
case 'M' : return 1000;
}
return res;
}
}
推荐阅读
- 剑指|剑指 Offer 13. 机器人的运动范围(dfs,bfs)
- 113.|113. 【torch】反向传播弃inplace操作
- codility|codility 之 MissingInteger
- 尊重与希望5.6.7.8.9.10.11.12.13.14.15.16.17.
- 【标题】剽悍行动营运营学院13.0复盘——忙,都是借口
- 13.
- 黑苹果升级10.13.4以后,usb3.0不能使用
- Integer常量池结合源码解析
- Codeforces Round #609 (Div. 2)——C. Long Beautiful Integer(思维)
- C++/C|Leetcode 213. 打家劫舍 II