From 780c10ecd0cae0800c93b20ffe778fd072359dfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= <14021051@buaa.edu.cn> Date: Thu, 27 Sep 2018 17:52:06 +0800 Subject: [PATCH] Create 13. Roman to Integer.md --- 13. Roman to Integer.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 13. Roman to Integer.md diff --git a/13. Roman to Integer.md b/13. Roman to Integer.md new file mode 100644 index 0000000..7b47fe3 --- /dev/null +++ b/13. Roman to Integer.md @@ -0,0 +1,27 @@ +# [13. Roman to Integer](https://leetcode.com/problems/roman-to-integer/description/) +# 思路 +罗马数字转阿拉伯数字。七个大写字母对应七个数,对应关系可以用一个数组(或者map)来实现。 +用res代表结果,将代表罗马数字的字符串s从前往后遍历,如果当前字母对应的数大于等于下一个字母对应的数,则res加上对应的数,否则减。 +注意:根据题意是没有可能发生s[i] < s[i + 1] < s[i + 2]的。 +# C++ +``` +class Solution { +public: + int romanToInt(string s) { + vectormp(26); + mp['I' - 'A'] = 1; + mp['V' - 'A'] = 5; + mp['X' - 'A'] = 10; + mp['L' - 'A'] = 50; + mp['C' - 'A'] = 100; + mp['D' - 'A'] = 500; + mp['M' - 'A'] = 1000; + int res = mp[s[s.size() - 1] - 'A']; + for(int i = 0; i < s.size() - 1; i++){ + if(mp[s[i] - 'A'] < mp[s[i + 1] - 'A']) res -= mp[s[i] - 'A']; + else res += mp[s[i] - 'A']; + } + return res; + } +}; +```