leetcode 13 : Roman to Integer
来源:互联网 发布:广州淘宝运营代理公司 编辑:程序博客网 时间:2024/06/15 21:18
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
思路:
1.首先了解罗马数字:
I:1
V:5
X:10
L:50
C:100
D:500
M:1000
V和X左边的小数字只能用Ⅰ。
L和C左边的小数字只能用X。
D和M左边的小数字只能用C。
即:IV=4,IX=9,XL=40,XC=90,CD=400,CM=900
2.重点就是判断IV,IX,XL,XC,CD,CM 六个数。利用循环遍历字符串,然后分别判断各种情况,特别注意考虑到边界情况。这道题我好多种情况没有考虑到,后来在调试的修改了3次才AC。代码写的太长,不太好,以后改进。
代码:
public class Solution {public int romanToInt(String s) { int result=0; int ci=0,cv=0,cx=0,cl=0,cc=0,cd=0,cm=0; int civ=0,cix=0,cxl=0,cxc=0,ccd=0,ccm=0; if(s.isEmpty()) return 0; else if(s.charAt(0)=='M'||s.charAt(0)=='m') cm++; else if(s.charAt(0)=='D'||s.charAt(0)=='d') cd++; else if(s.charAt(0)=='C'||s.charAt(0)=='c') { if(s.length()==1) cc++; else if(s.charAt(1)!='D'&&s.charAt(1)!='d'&&s.charAt(1)!='M'&&s.charAt(1)!='m') cc++; } else if(s.charAt(0)=='L'||s.charAt(0)=='l') cl++; else if(s.charAt(0)=='X'||s.charAt(0)=='x') { if(s.length()==1) cx++; else if(s.charAt(1)=='L'||s.charAt(1)=='l'||s.charAt(1)=='C'||s.charAt(1)=='c') ; else cx++; } else if(s.charAt(0)=='V'||s.charAt(0)=='v') cv++; else if(s.charAt(0)=='I'||s.charAt(0)=='i'){ if(s.length()==1) ci++; else if(s.charAt(1)=='I'||s.charAt(1)=='i') ci++; } for(int i=1;i<s.length();i++){ if(s.charAt(i)=='M'||s.charAt(i)=='m'){ if(s.charAt(i-1)=='C'||s.charAt(i-1)=='c') ccm++; else cm++; } else if(s.charAt(i)=='D'||s.charAt(i)=='d'){ if(s.charAt(i-1)=='C'||s.charAt(i-1)=='c') ccd++; else cd++; } else if(s.charAt(i)=='C'||s.charAt(i)=='c'){ if(s.charAt(i-1)=='X'||s.charAt(i-1)=='x') cxc++; else if(i==s.length()-1) ++cc; else if(s.charAt(i+1)=='D'||s.charAt(i+1)=='d'||s.charAt(i+1)=='M'||s.charAt(i+1)=='m') continue; else cc++; } else if(s.charAt(i)=='L'||s.charAt(i)=='l'){ if(s.charAt(i-1)=='X'||s.charAt(i-1)=='x') cxl++; else cl++; } else if(s.charAt(i)=='X'||s.charAt(i)=='x'){ if(s.charAt(i-1)=='I'||s.charAt(i-1)=='i') cix++; else if(i==s.length()-1) cx++; else if(s.charAt(i+1)=='L'||s.charAt(i+1)=='l'||s.charAt(i+1)=='C'||s.charAt(i+1)=='c') continue; else cx++; } else if(s.charAt(i)=='V'||s.charAt(i)=='v'){ if(s.charAt(i-1)=='I'||s.charAt(i-1)=='i') civ++; else cv++; } else if(s.charAt(i)=='I'||s.charAt(i)=='i'){ if(i==s.length()-1) ci++; else if(s.charAt(i+1)=='I'||s.charAt(i+1)=='i') ci++; else continue; } } result=ci*1+cv*5+cx*10+cl*50+cc*100+cd*500+cm*1000 +civ*4+cix*9+cxl*40+cxc*90+ccd*400+ccm*900; return result; }}
0 0
- leetcode-13:Roman to Integer
- leetcode 13 Roman to Integer
- Leetcode【13】:Roman to Integer
- [leetcode 13] Roman to Integer
- [Leetcode] 13 - Roman to Integer
- LeetCode | #13 Roman to Integer
- leetcode.13---------Roman to Integer
- leetCode #13 Roman to Integer
- leetcode-13 Roman to Integer
- leetcode 13 Roman to Integer
- LeetCode 13 Roman to Integer
- LeetCode 13 - Roman to Integer
- leetcode 13 -- Roman to Integer
- LeetCode 13:"Roman to Integer"
- LeetCode---(13)Roman to Integer
- leetcode-13Roman to Integer
- leetcode 13: Roman to Integer
- Leetcode 13 Roman to Integer
- android图片文件的路径地址与Uri的相互转换
- AndroidStudio无法更新代码
- citrix协议ICA技术原理
- Serif和Sans-serif字体的区别
- 大众化的登录界面的一种完美简单的实现方法(验证码+自带一键删除+用户名密码为空时抖动提示)
- leetcode 13 : Roman to Integer
- Java CMS收集器
- hehe2
- Hazelcast配置文档(完整)
- 用Java读取Properties文件六种方法
- Android仿搜狗浏览器加载动画
- HDU 5224 Tom and paper
- MongoDB小技巧
- linux-3.12.48内核向at91sam9g25平台移植小结