using System;
using System.Collections.Generic;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string s = "XXVII"; //10+10+5+1+1=27
int sum = Solution.RomanToInt(s);
Console.WriteLine($"罗马数字{s}转换为整数:{sum}");
}
}
//时间复杂度:O(n),n是字符串的长度。
//空间复杂度:O(1)。
public class Solution
{
public static int RomanToInt(string s)
{
Dictionary<char, int> dic = new() { { 'I', 1 }, { 'V', 5 }, { 'X', 10 }, { 'L', 50 }, { 'C', 100 }, { 'D', 500 }, { 'M', 1000 }, };
int num = 0;
for (int i = 0; i < s.Length; ++i)
{
if (i < s.Length - 1 && dic[s[i]] < dic[s[i + 1]])//比下一个字符小就减,例如IV,I=1,V=5,1<5所以IV=5-1=4
{
num -= dic[s[i]];
}
else//比下一个字符大或等就加,例如VI,V=5,I=1,5>1所以VI=5+1=6
{
num += dic[s[i]];
}
}
return num;
}
}
}
执行结果:罗马数字XXVII转换为整数:27