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