leetcode第13题

简介: 解法一先来一种不优雅的,也就是我开始的想法。就是遍历字符串,然后转换就可以,但同时得考虑 IV,IX 那些特殊情况。

image.png

top13

和上一道题相反,将罗马数字转换成阿拉伯数字。

解法一

先来一种不优雅的,也就是我开始的想法。就是遍历字符串,然后转换就可以,但同时得考虑 IV,IX 那些特殊情况。

publicintgetInt(charr) {
intans=0;
switch (r) {
case'I':
ans=1;
break;
case'V':
ans=5;
break;
case'X':
ans=10;
break;
case'L':
ans=50;
break;
case'C':
ans=100;
break;
case'D':
ans=500;
break;
case'M':
ans=1000;
        }
returnans;
    }
publicintgetInt(charr, charr_after) {
intans=0;
switch (r) {
case'I':
ans=1;
break;
case'V':
ans=5;
break;
case'X':
ans=10;
break;
case'L':
ans=50;
break;
case'C':
ans=100;
break;
case'D':
ans=500;
break;
case'M':
ans=1000;
break;
        }
if (r=='I') {
switch (r_after) {
case'V':
ans=4;
break;
case'X':
ans=9;
            }
        }
if (r=='X') {
switch (r_after) {
case'L':
ans=40;
break;
case'C':
ans=90;
            }
        }
if (r=='C') {
switch (r_after) {
case'D':
ans=400;
break;
case'M':
ans=900;
            }
        }
returnans;
    }
publicbooleanisGetTwoInt(charr, charr_after) {
if (r=='I') {
switch (r_after) {
case'V':
returntrue;
case'X':
returntrue;
            }
        }
if (r=='X') {
switch (r_after) {
case'L':
returntrue;
case'C':
returntrue;
            }
        }
if (r=='C') {
switch (r_after) {
case'D':
returntrue;
case'M':
returntrue;
            }
        }
returnfalse;
    }
publicintromanToInt(Strings) {
intans=0;
for (inti=0; i<s.length() -1; i++) {
ans+=getInt(s.charAt(i), s.charAt(i+1));
//判断是否是两个字符的特殊情况if (isGetTwoInt(s.charAt(i), s.charAt(i+1))) {
i++;
            }
        }
//将最后一个字符单独判断,如果放到上边的循环会越界if (!(s.length() >=2&&isGetTwoInt(s.charAt(s.length() -2), s.charAt(s.length() -1)))) {
ans+=getInt(s.charAt(s.length() -1));
        }
returnans;
    }

解法二

https://leetcode.com/problems/roman-to-integer/description/

publicintromanToInt(Strings) {
intsum=0;
if(s.indexOf("IV")!=-1){sum-=2;}
if(s.indexOf("IX")!=-1){sum-=2;}
if(s.indexOf("XL")!=-1){sum-=20;}
if(s.indexOf("XC")!=-1){sum-=20;}
if(s.indexOf("CD")!=-1){sum-=200;}
if(s.indexOf("CM")!=-1){sum-=200;}
charc[]=s.toCharArray();
intcount=0;
for(;count<=s.length()-1;count++){
if(c[count]=='M') sum+=1000;
if(c[count]=='D') sum+=500;
if(c[count]=='C') sum+=100;
if(c[count]=='L') sum+=50;
if(c[count]=='X') sum+=10;
if(c[count]=='V') sum+=5;
if(c[count]=='I') sum+=1;
   }
returnsum;
}


把出现的特殊情况,提前减了就可以。

时间复杂度:O(1)。

空间复杂度:O(1)。


这道题也不难,自己一开始没有充分利用罗马数字的特点,而是用一些 if,switch 语句判断是否是特殊情况,看起来就很繁琐了。

相关文章
|
定位技术
Echarts实战案例代码(10):echarts结合世界所有国家地图数据集geojson的(英文翻译映射)解决方案
Echarts实战案例代码(10):echarts结合世界所有国家地图数据集geojson的(英文翻译映射)解决方案
1296 0
Echarts实战案例代码(10):echarts结合世界所有国家地图数据集geojson的(英文翻译映射)解决方案
|
7月前
|
存储 Java 数据库连接
深入理解 JPA 的 @ElementCollection 注解及其应用场景
本文深入解析了JPA中`@ElementCollection`注解的功能与应用场景。该注解适用于映射实体类中的基本类型或嵌入式类型的集合属性,无需为集合元素创建独立实体。文章通过存储基本类型、嵌入式类型及枚举类型的集合等典型场景,展示了其简化映射、自动管理中间表的优势,并对比了`@OneToMany`和`@ManyToMany`的区别。同时提供了最佳实践建议,如明确生命周期、性能优化和懒加载策略,帮助开发者高效运用此注解以构建清晰、高效的持久化层。
159 0
|
11月前
|
存储 人工智能 安全
《数据主权:人工智能时代的核心基石与挑战》
在数字化时代,人工智能成为社会变革的强大力量,深刻改变着我们的生活方式。数据主权作为其核心基石,涉及国家、企业和个人的数据管辖与控制权。国家层面,数据主权关乎国家安全与经济竞争力;企业层面,合规利用数据可提升竞争力,但也面临法律风险;个人层面,隐私保护至关重要。国际社会正通过法规和技术手段(如GDPR和区块链)应对这些挑战,以确保数据安全与隐私,推动人工智能健康发展。
292 18
|
机器学习/深度学习 Python
验证集的划分方法:确保机器学习模型泛化能力的关键
本文详细介绍了机器学习中验证集的作用及其划分方法。验证集主要用于评估模型性能和调整超参数,不同于仅用于最终评估的测试集。文中描述了几种常见的划分方法,包括简单划分、交叉验证、时间序列数据划分及分层抽样划分,并提供了Python示例代码。此外,还强调了在划分数据集时应注意随机性、数据分布和多次实验的重要性。合理划分验证集有助于更准确地评估模型性能并进行有效调优。
|
安全 Linux 开发者
如何根据自己的开发板型号下载和配置交叉编译链
【8月更文挑战第25天】本指南详细介绍了如何为您的开发板下载和配置合适的交叉编译链。首先,需确定开发板的型号及其处理器架构(如ARM、MIPS等)。接着,可通过官方渠道或开源社区寻找适用的交叉编译链。下载时,请确保版本与开发板匹配并验证来源可靠性。配置过程包括解压文件、设置环境变量及验证配置正确性。最后,通过编译并运行简单的测试程序(如“Hello, World!”)来测试交叉编译链的有效性。若过程中遇到困难,建议查阅相关文档或求助于技术论坛。
339 1
|
JavaScript 前端开发
ESlint + Stylelint + VSCode自动格式化代码(2023)
ESlint + Stylelint + VSCode自动格式化代码(2023)
411 0
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp微信小程序的电影院订票选座系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的电影院订票选座系统的详细设计和实现
184 1
|
iOS开发
iOS之使用模拟器报错:resource fork, Finder information, or similar detritus not allowed完美解决方案
iOS之使用模拟器报错:resource fork, Finder information, or similar detritus not allowed完美解决方案
6925 0
|
安全 关系型数据库 数据库
postgresql|数据库|角色(用户)管理工作---授权和去权以及usage和select两种权限的区别
postgresql|数据库|角色(用户)管理工作---授权和去权以及usage和select两种权限的区别
770 0
|
并行计算 算法 Linux
[Eigen中文文档] 在 BLAS/LAPACK 、英特尔® MKL 和 CUDA 中使用 Eigen
自Eigen 3.3版本以及以后,任何F77兼容的BLAS或LAPACK库都可以用作稠密矩阵乘积和稠密矩阵分解的后端。例如,可以在OSX上使用Intel® MKL,Apple的Accelerate框架,OpenBLAS,Netlib LAPACK等。 请务必查看此页面以进一步讨论关于使用Intel® MKL(也包括VML,PARDISO等)的具体用法。
1083 0