JAVA leetCode 13. 罗马数字转整数

 

         方法一:1.通过hashmap来保存字符与数字之间的关系

                        2:根据罗马数字转整数的特点,当前字符比右边的字符小并且不是最后一个字符就说明在计算总数时该字符的符号是负,反之即为正

代码展示:

public static int romanToInt(String s){int answer=0;Map<Character,Integer> map=new HashMap<>(); //创建一个哈希表用来储存罗马数字与阿拉伯数字的对应关系map.put('I',1);map.put('V',5);map.put('X',10);map.put('L',50);map.put('C',100);map.put('D',500);map.put('M',1000);int s_length=s.length();for(int i=0;i<s_length;i++){int num=map.get(s.charAt(i));if(i<s_length-1&&num<map.get(s.charAt(i+1))){answer-=num;}else {answer+=num;}}return answer;}

         根据上面提到的特点,遍历给出的字符串中的每个字符,判断是否是最后一个以及与自身右边字符的大小关系便可知道在最终答案是加还是减。

        特别注意的是条件 i<s_length-1&&num<map.get(s.charAt(i+1))的顺序不能改变,因为要是改变了i+1就有可能超出字符串的范围,导致访问错误。

        方法二:比方法一笨一点

                1.定义两个指针i和j,j向前遍历两个字符

                2.如果遍历到的两个字符是特殊的六种情况中的一个,则直接将i移动到j的位置,并直接通过switch将值加到结果中

                3.如果遍历到的两个字符不是特殊的六种情况中的一个,就将j返回到i所在的位置,然后只取出当前i指向的字符,将当前i指向的这个字符的数值加到结果中

                4.依次遍历完所有字符即可

 public static int romanToInt(String s) {int answer=0;StringBuilder two_char=new StringBuilder();int s_length=s.length();for(int i=0,j=0;i<s_length&&j<s_length;){two_char.replace(0,two_char.length(),"");for(int k=0;k<2;k++){   //j向前获取两个字符if(j<s_length){two_char.append(s.charAt(j++)); //将获取的两个字符拼接到two_char字符串上}else {break;}}switch (two_char.toString()){case "IV":answer+=4;i=j;break;case "IX":answer+=9;i=j;break;case "XL":answer+=40;i=j;break;case "XC":answer+=90;i=j;break;case "CD":answer+=400;i=j;break;case "CM":answer+=900;i=j;break;default:j=i;    //当字符串不是以上的字符串时说明是单个的字符,将j返回到i的位置char ch=s.charAt(i);i++;j++;switch (ch){case 'I':answer+=1;break;case 'V':answer+=5;break;case 'X':answer+=10;break;case 'L':answer+=50;break;case 'C':answer+=100;break;case 'D':answer+=500;break;case 'M':answer+=1000;break;default:break;}break;}}return answer;}

        注意指针j所遍历到的两个字符是拼接到StringBuilder字符串后的,然后在下一次循环的时候先将StringBuilder字符串至空再拼接新的两个字符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15561.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之图

7 图的存储 &#xff08;1&#xff09;图的邻接矩阵存储 对于无向图&#xff0c;邻接矩阵第i行/列上非零元素个数是顶点vi的度。 对于有向图&#xff0c;邻接矩阵第i行上非零元素个数是顶点vi的出度&#xff0c;第i列 上非零元素个数是顶点vi的入度。 对于带权有向图有边则…

如何用Stable Diffusion模型生成个人专属创意名片?

目录 1 什么是二维码&#xff1f;2 什么是扩散模型&#xff1f;3 Stable Diffusion环境搭建4 开始制作创意名片结语 1 什么是二维码&#xff1f; 二维码是一种用于存储和传输信息的方便而广泛使用的图像编码技术。它是由黑色方块和白色空白区域组成的二维图形&#xff0c;可以…

C#学习之路-基本语法

C# 是一种面向对象的编程语言。在面向对象的程序设计方法中&#xff0c;程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型&#xff0c;或者说&#xff0c;是在相同的 class 中。 using System; using System.Collections.Generic; using System.Linq; using S…

day68_Vue基础

今日内容 零、 复习昨日 零、 复习昨日 一、Vue简介 1.1 简介 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式的js框架&#xff0c;发布于 2014 年 2 月。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注…

青岛大学_王卓老师【数据结构与算法】Week05_03_队列的定义和特点_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c; 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础…

webpack5搭建与基本配置

webpack基础构建 新建文件夹进入文件夹查看是否安装node&#xff0c;命令&#xff1a;node-v创建package.json文件&#xff0c;命令&#xff1a;npm init -y安装webpack和webpack-cli&#xff0c;&#xff08;命令自动创建出package-lock.json文件和node_modules文件夹&#x…

C++初识模板

文章目录 &#x1f451;1. 泛型编程&#x1f452;2. 模板&#x1f4ff;2.1 函数模板&#x1f3b6;2.11 类型推理&#x1f3b6;2.12 函数模板实例化&#x1f3b6;2.13 匹配原则 &#x1f4ff;2.2 类模板 &#x1f451;1. 泛型编程 void Swap(int& a, int& b) {int tmp …

MySQL基础(五)视图、存储过程和存储函数、变量

目录 常见的数据库对象 ​编辑 视图 创建视图 改变视图 优缺点 存储过程与存储函数 创建存储过程 创建存储函数 存储过程和存储函数的区别 存储过程和函数的查看、修改、删除 查看 修改 删除 存储过程的优缺点 优点 缺点 变量 系统变量 查看系统变量 修改…

Redis的一个大Key

什么是 redis 的大 key? redis 的大 key 不是指存储在 redis 中的某个 key 的大小超过一定的阈值&#xff0c;而是该 key 所对应的 value 过大对于 string 类型来说&#xff0c;一般情况下超过 10KB 则认为是大 key&#xff1b;对于set、zset、hash 等类型来说&#xff0c;一…

Linux —— Gitee

目录 一&#xff0c;介绍 二&#xff0c;使用 一&#xff0c;介绍 用于代码托管、版本控制、多人协助等&#xff1b; Gitee是开源中国&#xff08;OSChina&#xff09;推出的基于Git的代码托管服务&#xff1b;深圳市奥思网络科技有限公司&#xff1b; 二&#xff0c;使用 网…

3.9.错误处理的理解以及错误的传播特性

目录 前言1. thrust2. error总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习精简 CUDA 教程-错误处理的理解以及错误的传播…

【爬虫】5.4 Selenium 实现用户登录

目录 任务目标 创建模拟网站 创建服务器程序 键盘输入动作 鼠标点击动作 编写爬虫程序 任务目标 Selenium 查找的 HTML 元素是一个 WebElemen t对象&#xff0c; 这个对象不但可以获取元素的属性值&#xff0c;而且还能执行一 些键盘输入send_keys()与鼠标点击click()的动…