13. Roman to Integer
来源:互联网 发布:西安地税网络在线发票 编辑:程序博客网 时间:2024/05/19 21:59
题目
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
思路:在看到题目之后就去查了一下罗马数字的转换规则,发现规则如下:
一、七个基本数字
I :1
V:5
X:10
L:50
C :100
D:500
M:1000
二、构成规则
罗马数字无表示零的数。
表示数的基本方法:除I、X、C位于大数后作为加数,位于大数前作为减数外,一般把若干罗马基本数字写在一起,它表示的数字等于各个数字的和。
1.重写: III(3) XX(20) CC(200)
2.左减: IX(9) XL(40) CD(400)
3.右加: VII(7) XI(11) LX(60)
4.综合前三种方法:XLY(L-X+V,45) LXII(L+X+I+I,62)
因此想到用HashMap的方式构建罗马数字与其代表的数字之间的对应规则【注意Map构建时要写成Integer,而不是int,犯了这种概念错误第一次当然会编译不过,囧】
之后从前向后遍历字符串,按照规则将其转换成数字:当后一个数字小于前一个数字时,将后一个数字加到结果中;当后一个数字大于前一个数字时,将前一个数字减去一遍(因为之前将它加上了),再加上(后数-前数),即减去前一个数的两倍再加上后一个数。
代码如下:
public class Solution { public int romanToInt(String s) { int length = s.length(); //处理空字符串的情况 if(length == 0 || s == null){return -1;} //构建Map映射关系 HashMap<Character, Integer> romanToInt = new HashMap<Character, Integer>(); romanToInt.put('I',1); romanToInt.put('V',5); romanToInt.put('X',10); romanToInt.put('L',50); romanToInt.put('C',100); romanToInt.put('D',500); romanToInt.put('M',1000); /*罗马数字规则,右加左减 *在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。 *在一个较大的罗马数字的左边记上一个较小的罗马数字,表示大数字减小数字。 */ /*从前往后遍历罗马数字,如果某个数比前一个数小,则把该数加入到结果中;反之,则在结果中两次减去前一个数并加上当前这个数;*/ int i; int num = romanToInt.get(s.charAt(0)); for(i = 1; i < length; i++){ int cur = romanToInt.get(s.charAt(i)); int pre = romanToInt.get(s.charAt(i-1)); if(cur <= pre){ num += cur; }else{ num = num - pre -pre + cur; } } return num; }}
在discuss中看到从后向前遍历的方式,好像更简单,下一个再做的时候试着再用那个方法。
- 13. Roman to Integer
- 13.Roman to Integer
- 13. Roman to Integer
- 13.Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- jQuery显示隐藏密码插件jquery.toggle-password演示
- c++编译程序的内存分部
- C++多态之虚基类析构函数的作用
- 运算符重载(++ --)
- SSM——Spring
- 13. Roman to Integer
- 希尔排序实现
- hdu 2191 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活
- c_fun
- 学习Math、Random类
- Java/Android依赖注入库
- 整合到网站的一个播放页面
- SSM——Maven整合
- 安装Ubuntu 14.04后要做的事