首页 > 代码库 > leetcode------Roman to Integer
leetcode------Roman to Integer
标题: | Roman to Integer |
通过率: | 34.1% |
难度: | 简单 |
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 |
一般来说都是从大到小的书写,然后相加就行,但是里面会有几个特殊的,比如说 IV:5 ,CD:400等,这些是小的在前面,大的减小的即可,
所以本题的思路就是从后向前的去处理这个字符串,整体顺序是 i:[length-1]->[0],每次比较第i位置和第i+1位置,如果i位置<i+1位置 那么就用和值减去i位置,以此类推。本题没有什么健壮性去考虑,题目中已经说了会在1-3999的字符串。仅仅处理是空的时候返回0就行了,具体算法看代码:
1 public class Solution { 2 public int romanToInt(String s) { 3 Map<Character,Integer> map=new HashMap<Character,Integer>(); 4 map.put(‘I‘,1); 5 map.put(‘V‘,5); 6 map.put(‘X‘,10); 7 map.put(‘L‘,50); 8 map.put(‘C‘,100); 9 map.put(‘D‘,500);10 map.put(‘M‘,1000);11 int length=s.length(),result=0;12 if(length==0)return 0;13 result=map.get(s.charAt(length-1));14 length=length-2;15 while(length>=0){16 if(map.get(s.charAt(length))<map.get(s.charAt(length+1)))17 {18 result-=map.get(s.charAt(length));19 length--;20 }21 else{22 result+=map.get(s.charAt(length));23 length--;24 }25 26 27 }28 return result;29 }30 }
leetcode------Roman to Integer
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。