博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Roman To Integer leetcode java
阅读量:6370 次
发布时间:2019-06-23

本文共 1998 字,大约阅读时间需要 6 分钟。

问题描述:

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

算法:

/**

* 输入一个罗马数字,返回它的整型表示
* @author admin
* 转换规则:从右向左或者从左向右遍历均可
* 1 相同数字连写,相加 ;2 小数字在大数字右边,相加;3 小数字在大数字左边,大的减去小的
*/

方法一:hashmap 从右向左遍历

//将罗马数字转换为整型值public static int romanToInt(String s){    HashMap
roma_weight = new HashMap
();    roma_weight.put('I', 1);    roma_weight.put('V', 5);    roma_weight.put('X',10);    roma_weight.put('L', 50);    roma_weight.put('C', 100);    roma_weight.put('D',500);    roma_weight.put('M',1000);    char[] roma = s.toCharArray(); //将罗马数字转化为字符数组    int length = roma.length;    int preValue = 0; //前一步的value    int value = roma_weight.get(roma[length - 1]) ;// 当前的value    //从右向左遍历    for(int i = length - 2; i >= 0 ; i--){      //小的数字在大数字右边,直接相加      if( roma_weight.get(roma[i]) >= roma_weight.get(roma[i + 1])) {        preValue = value;        value = value + roma_weight.get(roma[i]);      }      else { //小的数字在大数字左边,大的减去小的        value = preValue + roma_weight.get(roma[i + 1]) - roma_weight.get(roma[i]);      }    }    return value;}

 

方法二:switch case,从左向右遍历

//与第一种方法基本相同,从左向右public static int romanToInt1(String s) {  char[] ss = s.toCharArray();  int ret = toNumber(ss[0]);   for (int i = 1; i < ss.length; i++) {     if (toNumber(ss[i - 1]) < toNumber(ss[i])) {       //ret - toNumber(ss[i - 1]) = preValue; 然后再进行 preValue + toNumber(ss[i]) - toNumber(ss[i - 1]);      ret += toNumber(ss[i]) - 2 * toNumber(ss[i - 1]);  //相当于方法一中的  preValue + roma_weight.get(roma[i + 1]) - roma_weight.get(roma[i]);    } else {       ret += toNumber(ss[i]);      }    }    return ret; }//罗马数字权重表,没有空间复杂度,较hashmap要好一些public static int toNumber(char ch) {   switch (ch) {     case 'I': return 1;     case 'V': return 5;     case 'X': return 10;     case 'L': return 50;     case 'C': return 100;     case 'D': return 500;     case 'M': return 1000;   }   return 0; }

 

转载于:https://www.cnblogs.com/mydesky2012/p/5035241.html

你可能感兴趣的文章
第十三天-企业应用架构模式-对象-关系元数据映射模式
查看>>
k8s与HPA--通过 Prometheus adaptor 来自定义监控指标
查看>>
Python 比特币教程之二: 机器人收发比特币
查看>>
虎牙直播在微服务改造方面的实践和总结
查看>>
怎样将优酷网站下载的视频KUX转MP4格式
查看>>
MongoDB 分组统计
查看>>
二进制状态码
查看>>
Vue 中 CSS 动画原理
查看>>
关于 Promise 的 9 个提示
查看>>
算法复习
查看>>
安卓中高级开发面试知识点之——缓存
查看>>
Java的初始化顺序
查看>>
js 判断回文字符串
查看>>
shields小徽章是如何生成的?以及搭建自己的shield服务器
查看>>
猫头鹰的深夜翻译:spring事务管理
查看>>
记一次使用Spring REST Docs + travis + github自动生成API接口文档的操作步骤(下)...
查看>>
1、集合 2、Iterator迭代器 3、增强for循环 4、泛型
查看>>
关于/var/run/docker.sock
查看>>
SCrapy爬虫大战京东商城
查看>>
用 JavaScript 实现链表操作 - 11 Alternating Split
查看>>