LeetCode刷题记录——day5
class Solution { public: int romanToInt(string s) { unordered_map<string, int> m = {{"I", 1}, {"IV", 3}, {"IX", 8}, {"V", 5}, {"X", 10}, {"XL", 30}, {"XC", 80}, {"L", 50}, {"C", 100}, {"CD", 300}, {"CM", 800}, {"D", 500}, {"M", 1000}}; int r = m[s.substr(0, 1)]; for(int i=1; i<s.size(); ++i){ string two = s.substr(i-1, 2); string one = s.substr(i, 1); r += m[two] ? m[two] : m[one]; } return r; } };
2、https://leetcode.cn/problems/integer-to-roman/?envType=study-plan-v2&envId=top-interview-150
暴力计算即可,记得向下取整的问题
class Solution { public: string intToRoman(int num) { int len=0,i=0; string s; len = num/1000; num=num%1000; for(;i<len;i++){ s+='M'; } len=len+2*(num/900); num=num%900; for(;i<len;i=i+2){ s+='C'; s+='M'; } len=len+num/500; num=num%500; for(;i<len;i++){ s+='D'; } len=len+2*(num/400); num=num%400; for(;i<len;i=i+2){ s+='C'; s+='D'; } len=len+num/100; num=num%100; for(;i<len;i++){ s+='C'; } len=len+2*(num/90); num=num%90; for(;i<len;i=i+2){ s+='X'; s+='C'; } len=len+num/50; num=num%50; for(;i<len;i++){ s+='L'; } len=len+2*(num/40); num=num%40; for(;i<len;i=i+2){ s+='X'; s+='L'; } len=len+num/10; num=num%10; for(;i<len;i++){ s+='X'; } len=len+2*(num/9); num=num%9; for(;i<len;i=i+2){ s+='I'; s+='X'; } len=len+(num/5); num=num%5; for(;i<len;i++){ s+='V'; } len=len+2*(num/4); num=num%4; for(;i<len;i=i+2){ s+='I'; s+='V'; } len=len+num; for(;i<len;i++){ s+='I'; } return s; } };
当然还是推荐使用字典或者某种表的方式
class Solution { public: string intToRoman(int num) { int values[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; string reps[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; string res; int for (int i = 0; i < 13; i ++ ) //这里不使用图里的count了,一遍一遍来就行了 while(num >= values[i]) { num -= values[i]; res += reps[i]; } return res; } };
分类:
LeetCode刷题
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签