leetcode 罗马数字与整数的转换算法
介绍:
该算法是将罗马数字转换为整数,思路如下:比如IXX,使用临时变量temp保存上一个已经遍历的罗马数字,比如:遍历时是从后往前遍历的:1> 刚开始时,temp = 0; 遍历当前遍历到第一个X,则temp == 0 < 10 == X ,则res = 10;temp = 10;2> 继续向前遍历,又遇到X,此时temp == 10 = 10 == X,则 res = res + 10;即res = 20; temp = 10;3> 继续向前遍历,遇到I,此时temp == 10 > 1 == I; 则 res = res - 1; 即res = 19; temp = 1;循环终止;
代码:
public class Solution {// 基本思想是根据罗马数字的特征,即左加右减的规律, 比如IX = 9, XI =11public int romanToInt(String s){if(s==null||s.length()<1)return -1;char ch[]=s.toCharArray();HashMap<Character,Integer> hm=new HashMap<Character,Integer>();hm.put('I', 1);hm.put('V', 5);hm.put('X', 10);hm.put('L', 50);hm.put('C', 100);hm.put('D', 500);hm.put('M', 1000);int res=0;int temp=0; 临时变量,保存的是当前遍历的上一个数值的值int value=0; 当前罗马值的大小for(int i=ch.length-1;i>=0;i--){value=hm.get(ch[i]);if(temp<=value){ 左加res+=value; temp=vlaue;}else{ 右减res-=value; temp=value;}}return res;
}
代码:
int romanToInt(string s) { int tagVal[256]; tagVal['I'] = 1; tagVal['V'] = 5; tagVal['X'] = 10; tagVal['C'] = 100; tagVal['M'] = 1000; tagVal['L'] = 50; tagVal['D'] = 500; int val = 0; for(int i = 0; i < s.length(); i++){ if(i+1 >= s.length() || tagVal[s[i+1]] <= tagVal[s[i]]) val += tagVal[s[i]]; else val -= tagVal[s[i]]; } return val; }
整数转罗马数字
string intToRoman(int num) { if(num <= 0) return ""; string ret = ""; static int number[13] = {1000, 900, 500, 400, 100,90, 50, 40, 10, 9, 5, 4, 1}; static string flags[13] = {"M","CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; for(int i = 0; i < 13 && num > 0; i++){ if(num < number[i]) continue; // cout<< i << " " << number[i] << " - " <<flags[i] << endl; while(num >= number[i]){ num-= number[i]; ret += flags[i]; } } return ret; }
leetcode 罗马数字与整数的转换算法相关推荐
- 罗马数字与整数互相转换
最近开始尝试在leecode网站上做一些较简单的算法题 目前底子比较薄,暂时还只能做一些简单的题目,这里记录了一个比较经典的题目: 罗马数字与整数的互相转换: 罗马数字包含以下七种字符: I, V, ...
- leetcode 罗马数字转整数
罗马数字包含以下七种字符:I,V,X,L,C,D 和M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做II ,即为两个并列的 1.1 ...
- [LeetCode] Plus One - 整数字符转换相加
题目概述: Given a non-negative number represented as an array of digits, plus one to the number. The dig ...
- LeetCode 罗马数字与阿拉伯数字的转换
罗马数字->阿拉伯数字 Roman to Integer class Solution {public:int romanToInt(string s) {map<char, int> ...
- leetcode算法刷题记录之罗马数字转整数
题目描述: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X ...
- 【LeetCode】【Java】13. 罗马数字转整数——给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
13. 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 ...
- 每天Leetcode 刷题 初级算法篇-数学问题-罗马数字转整数
题目要求: 力扣题解: 代码 /*** @program: mydemo* @description: 罗马数字转整数* @author: Mr.zeng* @create: 2021-02-24 0 ...
- 刻意练习:LeetCode实战 -- Task13. 罗马数字转整数
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...
- java输出罗马数字,【Java】【刷穿 LeetCode】13. 罗马数字转整数(简单)
首页 专栏 java 文章详情 0 [刷穿 LeetCode]13. 罗马数字转整数(简单) 宫水三叶发布于 今天 14:14 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 ...
最新文章
- 信息系统项目管理知识--项目管理一般知识
- display:none和visible:hidden两者的区别
- MyEclipse中JavaMail冲突问题
- 使用百度webuploader插件进行多文件类型分片上传实例
- 拼接图像亮度均匀调整_品质不变 价格更香 | 爆款拼接屏新品上市
- 2017/09/01-2017/09/30工作日志(补)
- matlab freqs函数用法,Matlab freqs 函数
- javafx项目_爬虫系列(5):JavaFx界面
- 深度学习优化算法大全系列7:NAdam,算法选择,调参
- 第十三届蓝桥杯省赛模拟赛题解(2022年第四次模拟赛)C/C++
- HDU 2079 选课时间 组合题
- 配置服务器获取信息失败,获取配置服务器失败
- 使用函数调用 输出三个数中的最大值,最小值
- Java实现牛牛的水杯
- TTL、Ping包最大字节数、网络时延、抖动、丢包率,看完瞬间变大神!
- java双冒号_jdk8新特性之双冒号 :: 用法及详解
- cad套索选择lisp_怎么将CAD2015,CAD2016的窗交窗口选择框的套索改为矩形吗
- java 上转型对象_Java中上转型对象数组
- 2019年最新出搜索引擎蜘蛛网页爬虫大全
- Flutter使用Provider
热门文章
- 软件工程网络工程第二次训练(AC代码和详细解释)(C语言描述)
- python的socket
- 视频语音转换成文字要怎么操作呢?
- 流程控制之顺数结构和选择结构
- 基于arm-linux-gcc版本,音乐视频播放器mplayer
- (4)Dojo学习之动画学习
- 关于Holder不等式等号成立的条件的理解
- Italvibras M3/4-S02振动电机M3/20-S02 3/100-S02 3/200-S02 MVSI 3/300-S02振动电机
- 蚂蚁上市招股书:员工持股40%月薪人均5万,直奔财富自由
- 图文教程教您蓝底照片更换成白底和红底的方法