罗马数字转化为整数
* 1、基本数字 Ⅰ、X 、C 中的任何一个、自身连用构成数目、或者放在大数的右边连用构成数目、都不能超过三个;放在大数的左边只能用一个;
* 2、不能把基本数字 V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目、只能使用一个;
* 3、V 和 X 左边的小数字只能用 Ⅰ;
* 4、L 和 C 左边的小数字只能用X;
* 5、D 和 M 左边的小数字只能用 C。

思路:顺序读取字符,如果前面后面一位大于前面一位,则减去2倍的前面一位,因为前面加过一次。否则加上该位对应的数字。

     public int romanToInt(String s) {
int result=toNum(s.charAt(0));
for(int i=1;i<s.length();i++){
if(toNum(s.charAt(i-1))<toNum(s.charAt(i))){
result+=toNum(s.charAt(i))-2*toNum(s.charAt(i-1)); //为什么要减去2倍的前一位,是因为前面加过一次。可以分析 XIX=19;
}else{
result+=toNum(s.charAt(i));
}
}
return result;
}
int toNum(char ch){ //或是通过存储在HashMap中。
int n=0;
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 n;
}

最新文章

  1. Building GCC 4.1.2 in CentOS 7 for Maya API development
  2. 20150626_Andriod_02_ListView2_列表与详细信息
  3. LotusPhp起步:经典的HelloWorld
  4. Python脚本控制的WebDriver 常用操作 &lt;四&gt; 设置浏览器大小
  5. linux乱码问题
  6. 钣金的折弯成型工艺(Press Braking)
  7. PHP自练项目中个人中心创建,修改,验证(服务器端和客户端验证)
  8. android中RelativeLayout无法填充ScrollView布局的问题
  9. 一步一步学EF系列【6、IOC 之AutoFac】
  10. 整合第二次(SSM第一次)------------&gt;spring+struts2+mybatis
  11. 2019.4.10 初识puppeteer
  12. Ubuntu 18.04设置dns
  13. asp.net安装指令
  14. 【转】如何避免OOM总结
  15. windows下python管理右键菜单
  16. MySQL性能优化之道
  17. HDU 4579 Random Walk (解方程组)
  18. 转:系统吞吐量(TPS)、用户并发量、性能测试概念和公式
  19. 洛谷 2957 [USACO09OCT]谷仓里的回声Barn Echoes
  20. 李洪强iOS经典面试题32-简单介绍 ARC 以及 ARC 实现的原理

热门文章

  1. Mac. 文件夹赋予权限
  2. C#里判断字符串是否为纯数字
  3. masm学习
  4. EVB-P6UL:一识庐山真面目
  5. codeforces 486C Palindrome Transformation 贪心求构造回文
  6. Hessian原理与程序设计
  7. 为什么我们有时不用配置java环境变量?
  8. 使用jquey的css()方法改变样式,
  9. Sahi ---实现 Web 自动化测试
  10. 设计模式之Visitor模式(笔记)