Leetcode 13 罗马数字转整数 学习感悟

思路:首先提前存好每个字符和对应的数字

如:MCMXCIV

先比较第一个字符M,找到对应的vector位置和对应的数字,此时看第二给数字MC是否和vector中的串匹配

若不比配,先记下M=1000,若匹配则记录对应值,遇到C找到对应100,CM匹配900,则记录900,XC匹配90,IV匹配4

总计:1994

class Solution {
public:
void priVector(vector<pair<string, int>>& s) {
	s.push_back(make_pair("I", 1));
	s.push_back(make_pair("IV", 4));//1
	s.push_back(make_pair("V", 5));
	s.push_back(make_pair("IX", 9));//3
	s.push_back(make_pair("X", 10));
	s.push_back(make_pair("XL", 40));//5
	s.push_back(make_pair("L", 50));
	s.push_back(make_pair("XC", 90));//7
	s.push_back(make_pair("C", 100));
	s.push_back(make_pair("CD", 400));//9
	s.push_back(make_pair("D", 500));
	s.push_back(make_pair("CM", 900));//11
	s.push_back(make_pair("M", 1000));
	//先提前存好
	//6种特殊是IV IX   XL  XC   CD  CM   
}

int romanToInt(string s) {
	vector<pair<string, int>>p;
	priVector(p);
	int i;
	int res=0;
	for (i=0; i < s.size(); i++) {//从0到s串末尾
		for (int j = p.size() - 1; j >= 0; j--) {
			if (!s.substr(i, 1).compare(p[j].first)) {//与当前数匹配
				if (j+1< p.size() - 1 &&!s.substr(i, 2).compare(p[j+1].first)) {//继续2位匹配
					res+= p[j+1].second;
					i++;
				}
				else if (j + 3 < p.size() - 1&&!s.substr(i, 2).compare(p[j + 3].first)) {
					res += p[j + 3].second;
					i++;
				}
				else 
					res += p[j].second;
				break;
			}
		}
	}
	return res;
}
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值