标签:
https://leetcode.com/problems/roman-to-integer/
原题:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
思路:
关键是要搞清罗马数字规则。PS:不用考虑错误输入。
核心: 遍历一遍,相同字母合并成对应数,然后比较如果比它后面的小就减去,否则就加上。时间复杂度O(n)。
具体解析:
基本字符
|
I
|
V
|
X
|
L
|
C
|
D
|
M
|
相应的阿拉伯数字表示为
|
1
|
5
|
10
|
50
|
100
|
500
|
1000
|
1 class Solution { 2 public: 3 int romanToInt(string s) { 4 map<char,int> ro; 5 ro[‘I‘]=1; ro[‘V‘]=5; ro[‘X‘]=10; ro[‘L‘]=50; ro[‘C‘]=100; ro[‘D‘]=500; ro[‘M‘]=1000; 6 int n=s.size(); 7 int i=0,k=0,tmp=0; 8 while(i<n){ 9 tmp=ro[s[i]]; 10 while(i<n && s[i]==s[i+1]){ 11 tmp +=ro[s[i]]; 12 i++; 13 } 14 if( i==n || ro[s[i]]>ro[s[i+1]] ) 15 k +=tmp; 16 else 17 k -=tmp; 18 i++; 19 } 20 return k; 21 } 22 };
LeetCode(13)--Roman to Integer
标签:
原文地址:http://www.cnblogs.com/aezero/p/4548066.html