假期前刷了一个力扣题
自己调试了好久感觉终于完成了,但是到了最后几个实例测试的时候,怎么都运行不过去,自己也改了好久代码,最终放弃看了解析和评论。发现解答都是比较简短并且高效的,这让我审视自己的代码
#include<string>
#include<iostream>
using namespace std;
class S {
public:
string s;
int romanToInt(string s) {
int rem = 0;
if (s[0] == 'V')
{
rem += 5;
}
else if (s[0] == 'X')
{
rem += 10;
}
else if (s[0] == 'L')
{
rem += 50;
}
else if (s[0] == 'C')
{
rem += 100;
}
else if (s[0] == 'D')
{
rem += 500;
}
else if (s[0] == 'M')
{
rem += 1000;
}
else if (s[0] == 'I')
{
rem += 1;
}
for (int i = 1; i < s.size(); ++i)
{
if (s[i] == 'I')
{
if (s[i + 1] == 'V')
{
rem += 4;
i += 2;
}
else if (s[i + 1] == 'X')
{
rem += 9;
i += 2;
}
else {
rem += 1;
}
}
else if (s[i] == 'V')
{
if (s[i - 1] == 'I' && i != 1)
{
rem += 4;
}
else if (s[i - 1] == 'I' && i == 1)
{
rem += 3;
}
else {
rem += 5;
}
}
else if (s[i] == 'X')
{
if (s[i - 1] == 'I' && i != 1)
{
rem += 9;
}
else if (s[i - 1] == 'I' && i == 1)
{
rem += 8;
}
else if (s[i + 1] == 'L') {
rem += 40;
i += 2;
}
else if (s[i + 1] == 'C')
{
rem += 90;
i += 2;
}
else { rem += 10; }
}
else if (s[i] == 'L')
{
if (s[i - 1] == 'X' && i != 1)
{
rem += 40;
}
else if (s[i - 1] == 'X' && i == 1)
{
rem += 30;
}
else {
rem += 50;
}
}
else if (s[i] == 'C')
{
if (s[i - 1] == 'X' && i != 1)
{
rem += 90;
}
else if (s[i - 1] == 'X' && i == 1)
{
rem += 80;
}
else if (s[i + 1] == 'D')
{
rem += 400;
i += 2;
}
else if (s[i + 1] == 'M')
{
rem += 900;
i += 2;
}
else {
rem += 100;
}
}
else if (s[i] == 'D')
{
if (s[i - 1] == 'C' && i != 1)
{
rem += 400;
}
else if (s[i - 1] == 'C' && i == 1)
{
rem += 300;
}
else {
rem += 500;
}
}
else if (s[i] == 'M')
{
if (s[i - 1] == 'C' && i != 1)
{
rem += 900;
}
else if (s[i - 1] == 'C' && i == 1)
{
rem += 800;
}
else {
rem += 1000;
}
}
}
return rem;
}
};
int main()
{
S x;
x.s = "MCDLXXVI";
int xx = x.romanToInt(x.s);
cout << xx;
return 0;
}
上面是我写的代码,相必也能看出,代码臃肿且冗余,当我开始重复劳作的时候就应该开始思考,我是不是应该更改思路转而去寻找更简洁的实现方式
----2022.10.2