LeetCode 13 罗马数字转整数[找规律 多条件判断] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 13 罗马数字转整数[找规律 多条件判断] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
两种解题方法,第一种就是硬判断,把所有情况都考虑进去,一共十三种条件,怎么说还是有点麻烦的,代码如下:
class Solution {
public:
int romanToInt(string s) {
int res = 0;
int len = s.length();
for(int i = 0 ; i < len; i ++) {
if(s[i] == 'I' && i < len - 1 && s[i + 1] == 'V') {
res += 4;
i ++;
} else if (s[i] == 'I' && i < len - 1 && s[i + 1] == 'X') {
res += 9;
i ++;
} else if (s[i] == 'I') {
res += 1;
} else if (s[i] == 'V') {
res += 5;
} else if (s[i] == 'X' && i < len - 1 && s[i + 1] == 'L') {
res += 40;
i ++;
} else if (s[i] == 'X' && i < len - 1 && s[i + 1] == 'C') {
res += 90;
i ++;
} else if (s[i] == 'X') {
res += 10;
} else if (s[i] == 'L') {
res += 50;
} else if (s[i] == 'C' && i < len - 1 && s[i + 1] == 'D') {
res += 400;
i ++;
} else if (s[i] == 'C' && i < len - 1 && s[i + 1] == 'M') {
res += 900;
i ++;
} else if (s[i] == 'C') {
res += 100;
} else if (s[i] == 'D') {
res += 500;
} else if (s[i] == 'M') {
res += 1000;
}
}
return res;
}
};
/*作者:heroding
链接:https://leetcode-cn.com/problems/roman-to-integer/solution/cliang-chong-fang-fa-by-heroding-mc3y/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/
第二种就是找规律,观察可以发现如果从左往右越来越小就是正常情况,一路加下去就行,如有变大,就要把中间夹着的小的数减掉,这种方法虽然简洁,但是效率不高,代码如下:
class Solution {
private:
// 存储字符数值映射关系
unordered_map<char, int> values = {
{'I', 1},
{'V', 5},
{'X', 10},
{'L', 50},
{'C', 100},
{'D', 500},
{'M', 1000},
};
public:
int romanToInt(string s) {
int res = 0;
int len = s.length();
for(int i = 0; i < len; i ++) {
// 如果左边比右边小,减去
if(i < len - 1 && values[s[i]] < values[s[i + 1]]) {
res = res + values[s[i + 1]] - values[s[i]];
i ++;
} else {
res += values[s[i]];
}
}
return res;
}
};
/*作者:heroding
链接:https://leetcode-cn.com/problems/roman-to-integer/solution/cliang-chong-fang-fa-by-heroding-mc3y/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/
以上是关于LeetCode 13 罗马数字转整数[找规律 多条件判断] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章