leecode

阅读: 评论:0

leecode

leecode

一、题目


二、解题思路

我们遍历题目给出的字符串时,大部分情况下都是从大到小的顺序:M > D > C > L > X > V > I,但也会有一些特殊情况,所以我们须分两种情况进行讨论:
(1)字符为C、X、I 时,在不超出字符串范围的情况下,需多判断一位字符,因为它们组成CD,CM,XL,XC, IV,IX这几个特殊的字符串,是表示较小的数在表示较大的数的左边。
(2)M , D , L , V ,这几个数可以转换成相应的数字,不用做特殊处理。

注意点:刚开始我用宏定义代替数字的形式,为了后续代码修改方便和看着简洁,发现第一次运行花了12ms,初步判断是编译时宏定义需要拼接到代码中,这可能消耗一些时间,后面我去掉宏定义直接用数字的方式运行代码花了0ms,这里做一下简记,也知会一下各位读者。

三、VS-2022-测试代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STRLEN 10int romanToInt(char* s);void main() {size_t i;char StrArr[][STRLEN] = {"III" ,"IV" ,"IX" ,"LVIII"};int StrArrSize = sizeof(StrArr) / (sizeof(char) * STRLEN);printf("StrArrSize : %dn", StrArrSize);for (i = 0; i < StrArrSize; i++){printf("str : %s, res : %dn", StrArr[i], romanToInt(StrArr[i]));printf("+++++++++++++++++++++n");}
}int romanToInt(char* s) {int i = 0;int res = 0;int s_size = strlen(s);while (s[i] != ''){printf("s[%d] : %cn",i,s[i]);switch (s[i]){case 'M':res = res + 1000;break;case 'D':res = res + 500;break;case 'C'://CD , CMif ((i + 1 < s_size) && (s[i + 1] == 'M')){i++;res = res + 900;}else  if ((i + 1 < s_size) && (s[i + 1] == 'D')){i++;res = res + 400;}else{res = res + 100;}break;case 'L':res = res + 50;break;case 'X'://XL , XCif ((i + 1 < s_size) && (s[i + 1] == 'L')){i++;res = res + 40;}else  if ((i + 1 < s_size) && (s[i + 1] == 'C')){i++;res = res + 90;}else{res = res + 10;}break;case 'V':res = res + 5;break;case 'I'://IX , IVif ((i + 1 < s_size) && (s[i + 1] == 'V')){i++;res = res + 4;}else  if ((i + 1 < s_size) && (s[i + 1] == 'X')){i++;res = res + 9;}else{res = res + 1;}break;default:break;}//printf("res : %dn",res);i++;}return res;
}

四、VS-2022-运行截图

五、leecode提交代码

int romanToInt(char* s) {int i = 0;int res = 0;int s_size = strlen(s);while (s[i] != ''){//printf("s[%d] : %cn",i,s[i]);switch (s[i]){case 'M':res = res + 1000;break;case 'D':res = res + 500;break;case 'C'://CD , CMif ((i + 1 < s_size) && (s[i + 1] == 'M')){i++;res = res + 900;}else  if ((i + 1 < s_size) && (s[i + 1] == 'D')){i++;res = res + 400;}else{res = res + 100;}break;case 'L':res = res + 50;break;case 'X'://XL , XCif ((i + 1 < s_size) && (s[i + 1] == 'L')){i++;res = res + 40;}else  if ((i + 1 < s_size) && (s[i + 1] == 'C')){i++;res = res + 90;}else{res = res + 10;}break;case 'V':res = res + 5;break;case 'I'://IX , IVif ((i + 1 < s_size) && (s[i + 1] == 'V')){i++;res = res + 4;}else  if ((i + 1 < s_size) && (s[i + 1] == 'X')){i++;res = res + 9;}else{res = res + 1;}break;default:break;}//printf("res : %dn",res);i++;}return res;
}

六、leecode运行结果

本文发布于:2024-01-30 18:48:06,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170661168522085.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:leecode
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23