介绍:

该算法是将罗马数字转换为整数,思路如下:比如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 罗马数字与整数的转换算法相关推荐

  1. 罗马数字与整数互相转换

    最近开始尝试在leecode网站上做一些较简单的算法题 目前底子比较薄,暂时还只能做一些简单的题目,这里记录了一个比较经典的题目: 罗马数字与整数的互相转换: 罗马数字包含以下七种字符: I, V, ...

  2. 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 ...

  3. [LeetCode] Plus One - 整数字符转换相加

    题目概述: Given a non-negative number represented as an array of digits, plus one to the number. The dig ...

  4. LeetCode 罗马数字与阿拉伯数字的转换

    罗马数字->阿拉伯数字 Roman to Integer class Solution {public:int romanToInt(string s) {map<char, int> ...

  5. leetcode算法刷题记录之罗马数字转整数

    题目描述: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符          数值 I             1 V             5 X             ...

  6. 【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 ...

  7. 每天Leetcode 刷题 初级算法篇-数学问题-罗马数字转整数

    题目要求: 力扣题解: 代码 /*** @program: mydemo* @description: 罗马数字转整数* @author: Mr.zeng* @create: 2021-02-24 0 ...

  8. 刻意练习:LeetCode实战 -- Task13. 罗马数字转整数

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  9. java输出罗马数字,【Java】【刷穿 LeetCode】13. 罗马数字转整数(简单)

    首页 专栏 java 文章详情 0 [刷穿 LeetCode]13. 罗马数字转整数(简单) 宫水三叶发布于 今天 14:14 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 ...

最新文章

  1. 信息系统项目管理知识--项目管理一般知识
  2. display:none和visible:hidden两者的区别
  3. MyEclipse中JavaMail冲突问题
  4. 使用百度webuploader插件进行多文件类型分片上传实例
  5. 拼接图像亮度均匀调整_品质不变 价格更香 | 爆款拼接屏新品上市
  6. 2017/09/01-2017/09/30工作日志(补)
  7. matlab freqs函数用法,Matlab freqs 函数
  8. javafx项目_爬虫系列(5):JavaFx界面
  9. 深度学习优化算法大全系列7:NAdam,算法选择,调参
  10. 第十三届蓝桥杯省赛模拟赛题解(2022年第四次模拟赛)C/C++
  11. HDU 2079 选课时间 组合题
  12. 配置服务器获取信息失败,获取配置服务器失败
  13. 使用函数调用 输出三个数中的最大值,最小值
  14. Java实现牛牛的水杯
  15. TTL、Ping包最大字节数、网络时延、抖动、丢包率,看完瞬间变大神!
  16. java双冒号_jdk8新特性之双冒号 :: 用法及详解
  17. cad套索选择lisp_怎么将CAD2015,CAD2016的窗交窗口选择框的套索改为矩形吗
  18. java 上转型对象_Java中上转型对象数组
  19. 2019年最新出搜索引擎蜘蛛网页爬虫大全
  20. Flutter使用Provider

热门文章

  1. 软件工程网络工程第二次训练(AC代码和详细解释)(C语言描述)
  2. python的socket
  3. 视频语音转换成文字要怎么操作呢?
  4. 流程控制之顺数结构和选择结构
  5. 基于arm-linux-gcc版本,音乐视频播放器mplayer
  6. (4)Dojo学习之动画学习
  7. 关于Holder不等式等号成立的条件的理解
  8. Italvibras M3/4-S02振动电机M3/20-S02 3/100-S02 3/200-S02 MVSI 3/300-S02振动电机
  9. 蚂蚁上市招股书:员工持股40%月薪人均5万,直奔财富自由
  10. 图文教程教您蓝底照片更换成白底和红底的方法