本文主要是介绍leetcode No13. Roman to Integer,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言:
先说点背景吧,这题我一直放着没做,因为我不知道Roman数是怎么计数的呀,然后最近在看《数学之美》(特别有意思的书,第一次觉得数学还挺有意思的)罗马人也是用不同的符号代表数的不同量级。
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1,000
解码规则:小数字出现在大数字左边为减,右边为加。
Ex:IV表示5-1=4,VII表示5+2=7,IIXX表示10-2+10=18
PS:这种解码规则太复杂,而且对于大的数字很难描述。比如写一百万,要写无数个M。直到近代他们才在M上用上划线表示几万和几十万。而中国人的解码规则是乘法,所以我们的祖先还是挺聪明的。
Question:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
就是把罗马字转换成十进制整型数。
Algorithm:
比较相邻的数,如果前一个数比后一个数大就加法,如果前一个数比后一个数小就减法。
Submitted Code:
class Solution {
public:int romanToInt(string s) {if(s.size()==0)return 0;map<char,int> hash;hash['I']=1;hash['V']=5;hash['X']=10;hash['L']=50;hash['C']=100;hash['D']=500;hash['M']=1000;if(s.size()==1)return hash[s[0]];int res = hash[s[0]];for(int i=1;i<s.size();i++){if(hash[s[i-1]]<hash[s[i]])res=res-hash[s[i-1]]+hash[s[i]]-hash[s[i-1]]; //因为之前加过hash[s[i-1]]else res=hash[s[i]]+res;}return res;}
};
这篇关于leetcode No13. Roman to Integer的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!