提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
这篇文章是该系列的第一篇,主要讲一下小白刷leetcode的一些心路历程
题目:罗马数字转换成整数
因为之前刷过数组类的题目,想刷下字符串的今天就刷下字符串吧,小白就要从最简单的开始
刷题过程
1.打开题目
首先打开字符串系列题目
我们阅读一下题目
可以看出是将罗马数字转换成整数,还是挺简单的
刷题有个窍门就是先看下标签和提示
这里有相关标签提示是用到哈希表
不过我感觉这里用不到哈希表
还有个提示告诉我们从尾到头遍历字符串和使用一个map,map其实就是映射的意思
2.解题过程
映射我理解的就是将罗马数字和对应的整数连接起来,这使我想到了c语言的switch,可以通过case将罗马数字与整数连接起来,就避免了复杂的if语句
switch(s[i])
{
case 'I': l=1;break;
case 'V': l=5;break;
case 'X': l=10;break;
case 'L': l=50;break;
case 'C': l=100;break;
case 'D': l=500;break;
case 'M': l=1000;break;
}
if(l>=k)
{
sum+=l;
k=l;
}
else{
sum-=l;
k=l;
}
我们观察罗马数字,从右边开始看,从右边开始数当第一个数字比第二个数字大时则需减去第二个数字,否则加起来,这里我们找到了转化的规律
下面是完整代码
int romanToInt(char * s){
int k=0;
int sum=0;
for(int i=strlen(s)-1;i>=0;i--)
{
int l=0;
switch(s[i])
{
case 'I': l=1;break;
case 'V': l=5;break;
case 'X': l=10;break;
case 'L': l=50;break;
case 'C': l=100;break;
case 'D': l=500;break;
case 'M': l=1000;break;
}
if(l>=k)
{
sum+=l;
k=l;
}
else{
sum-=l;
k=l;
}
}
return sum;
}
其实博主一开始是选择sizeof函数来计算字符串长度,应该是比较少刷题导致的
sizeof函数计算字符串长度的原理是把字符串每个字节的长度加起来,这就包括了字符串结尾的’\0’,结尾标识符所以在进行for循环时就会数组溢出,导致程序崩溃,第二次我就用了strlen函数
总结
其实,这道题目还是相当简单的一道题,就当做笔记啦