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.

 

这个题整体不是很难,就是把一串罗马数字转换成阿拉伯数字,主要是对罗马数字的了解。。我是一点也不了解,先看下罗马数字的意思:

I1
V5
X10
L50
C100
D500
M1000

一般来说都是从大到小的书写,然后相加就行,但是里面会有几个特殊的,比如说 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 }

 

 

 

转载于:https://www.cnblogs.com/pkuYang/p/4165941.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值