从零开始算法之路 ---- 罗马数字转整数(水题)
前言:小白入门题解,算法大佬可以直接跳过此博客(大佬轻喷哈)
题源: 力扣(LeetCode)https://leetcode-cn.com/problems/roman-to-integer
题目描述: 题目详情点击链接
思路(C++ 超级笨办法): 先把特殊情况考虑进去,即左边字符值的比右边字符值的小:把字符串中每一字符拆出来,把每一字符值和它右边第一个字符值做比较如果比右边第一个字符值小则用右边第一个字符值减去左边这个字符值 加到变量 Integer, 把特殊情况考虑清楚,剩下的就是遇到什么累加上去就行了,最后返回 Integer。
代码:
class Solution {
public:
/** 思路:先把特殊情况考虑进去,即左边字符值的比右边字符值的小:把字符串中每一字符拆出来, 把每一字符值和它右边第一个字符值做比较如果比右边第一个字符值小则用右边第一个字符值减去左边 这个字符值 加到变量 Integer, 把特殊情况考虑清楚,剩下的就是遇到什么累加上去就行了, 最后返回 Integer。 */
int romanToInt(string s) {
int Integer = 0;
for(int i = 0; i < s.length(); i++){
// I 放在 V(5)的左边,来表示 4 ,这一步 算了两个字符,i 要加 1
if(s[i] == 'I' && s[i+1] == 'V') {
Integer = Integer + 4;
i++;
}
// I 放在 X(10) 的左边,来表示 9。
else if(s[i] == 'I' && s[i+1] == 'X') {
Integer = Integer + 9;
i++;
}
// X在 L(50)的左边,来表示 40 。
else if(s[i] == 'X' && s[i+1] == 'L') {
Integer = Integer + 40;
i++;
}
//X 放在 C(100) 的左边,来表示 90。
else if(s[i] == 'X' && s[i+1] == 'C') {
Integer = Integer + 90;
i++;
}
// C放在 D(500) 的左边,来表示 400。
else if(s[i] == 'C' && s[i+1] == 'D') {
Integer = Integer + 400;
i++;
}
// C 放在 M(1000) 的左边,来表示 900。
else if(s[i] == 'C' && s[i+1] == 'M') {
Integer = Integer + 900;
i++;
}
// 把特殊情况考虑清楚,剩下的就是遇到什么累加上去就行了
else if(s[i] == 'I'){
Integer = Integer + 1;
}
else if(s[i] == 'V'){
Integer = Integer + 5;
}
else if(s[i] == 'X'){
Integer = Integer + 10;
}
else if(s[i] == 'L'){
Integer = Integer + 50;
}
else if(s[i] == 'C'){
Integer = Integer + 100;
}
else if(s[i] == 'D'){
Integer = Integer + 500;
}
else if(s[i] == 'M'){
Integer = Integer + 1000;
}
}
return Integer;
}
};
还没有评论,来说两句吧...