leetcode
来源:互联网 发布:linux安装hadoop2.7 编辑:程序博客网 时间:2024/05/31 18:53
Question13–Roman to Integer
将1到3999范围内的罗马数字转换为int型数据
method1(stupid)
和上篇博客中的question12一样,列出一个二元数组,然后一个一个去找。注意,从低位的大数字开始找,并且要先找IV(XL, CD), 然后找V(L,D)。
code:
int romanToInt(string s) { int num=0; string ch[][9]={{"I","II","III","IV","V","VI","VII","VIII","IX"}, {"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"}, {"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"}, {"M","MM","MMM"}}; for(int j=0; j<4; j++) for(int i=8; i>-1; i--){ if((j==3&&i>2)) continue; if(i==4&&s.find(ch[j][i-1])!=string::npos){ num+=pow(10,j)*(i); s=s.substr(0,s.size()-ch[j][i-1].size()); break; } if(i==3&&s.find(ch[j][i+1])!=string::npos){ num+=pow(10,j)*(i+2); s=s.substr(0,s.size()-ch[j][i+1].size()); break; } if(s.find(ch[j][i])!=string::npos){ num+=pow(10,j)*(i+1); s=s.substr(0,s.size()-ch[j][i].size()); break; } } return num; }
method2
要知道罗马数字的构成中有一条规则就是大数的左边最多只能有一位数,且必须是I,X,C中一个,也不能越级减。
左边有数的就那么几个:IV, IX, XL, XC, CD, CM
其余的都是一个大数加上它右边的小数
所以可以先把所有的对应值全部加起来,若出现上面左边有数的那几个则减掉增加的部分。
code:
int romanToInt(string s) { int num=0; for(char ch: s){ switch(ch){ case 'I': num+=1; break; case 'V': num+=5; break; case 'X': num+=10; break; case 'L': num+=50; break; case 'C': num+=100; break; case 'D': num+=500; break; case 'M': num+=1000; break; } } if(s.find("IV")!=string::npos) num-=2; if(s.find("IX")!=string::npos) num-=2; if(s.find("XL")!=string::npos) num-=20; if(s.find("XC")!=string::npos) num-=20; if(s.find("CD")!=string::npos) num-=200; if(s.find("CM")!=string::npos) num-=200; return num; }
阅读全文
0 0
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- leetcode
- JavaScript基础之选择器
- Android中apk多渠道打包----友盟打包实现步骤
- JavaScript实现回到顶部/底部的两种方法
- opencv 人脸检测源码解析
- TensorFlow(三)可视化
- leetcode
- C++面试题(~10)
- java工程师必修之路
- eleasticsearch 安装配置
- gitlab使用说明 与Tortoise Git一起使用
- git 常用命令
- ababoost算法与原理
- 代写实习报告写作要求
- QJM实现机制