您的位置:首页 > 其它

Leetcode习题记录——Integer to Roman 和 Roman to Integer

2017-07-12 15:41 429 查看
题目:Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

翻译一下就是将一个整数写成罗马数字的样子

第一种方法:列举所有的字母和对应的数字,用num去做减法,最后将字母拼接起来就完成了

class Solution {
public:
string intToRoman(int num) {
string str;
string symbol[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int value[]=    {1000,900,500,400, 100, 90,  50, 40,  10, 9,   5,  4,   1};
for (int i =0 ;num != 0; i++){
while(num >= value[i]){
num -= value[i];
str += symbol[i];
}
}
return str;
}
};


第二种方法:

leetcode 上看到的方法,快拿小本本记下来,实现得更为简单

public static String intToRoman(int num) {
String M[] = {"", "M", "MM", "MMM"};
String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
}


题目:Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

第一种方法:我通过map来查找罗马字母对应的数字,注意数字与罗马字母并不是一一对应的,而要进行一次判断。

class Solution {
public:
int romanToInt(string s) {
int integer[] = { 1,  5,  10, 50,  100,   500,  1000};
char roman[] ={  'I','V', 'X','L', 'C',   'D',   'M'};
map<char,int> tonum;
int sum = 0;
for(int i = 0; i< 7; i++)
tonum.insert(make_pair(roman[i],integer[i]));
for(int i = 0; i < s.length(); i++ ){
if(tonum[s[i-1]] < tonum[s[i]]){
sum += tonum[s[i]] - 2 * tonum[s[i - 1]];
}
else
sum += tonum[s[i]];
}
return sum;
}
};


第二种方法来自leetcode:

使用这个indexof更加简洁,但思路都是一样的。

public int romanToInt(String s) {
int sum=0;
if(s.indexOf("IV")!=-1){sum-=2;}
if(s.indexOf("IX")!=-1){sum-=2;}
if(s.indexOf("XL")!=-1){sum-=20;}
if(s.indexOf("XC")!=-1){sum-=20;}
if(s.indexOf("CD")!=-1){sum-=200;}
if(s.indexOf("CM")!=-1){sum-=200;}

char c[]=s.toCharArray();
int count=0;

for(;count<=s.length()-1;count++){
if(c[count]=='M') sum+=1000;
if(c[count]=='D') sum+=500;
if(c[count]=='C') sum+=100;
if(c[count]=='L') sum+=50;
if(c[count]=='X') sum+=10;
if(c[count]=='V') sum+=5;
if(c[count]=='I') sum+=1;

}

return sum;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: