12. 整数转罗马数字
自己做
解:逐步相减
class Solution {
public:
string intToRoman(int num) {
string s = "";
while(num / 1000 > 0){ //能否减1000
s += 'M';
num -= 1000;
}
while(num / 900 > 0){ //能否减900
s += "CM";
num -= 900;
}
while(num / 500 > 0){ //能否减500
s += 'D';
num -= 500;
}
while(num / 400 > 0){ //能否减400
s += "CD";
num -= 400;
}
while(num / 100 > 0){ //能否减100
s += 'C';
num -= 100;
}
while(num / 90 > 0){ //能否减90
s += "XC";
num -= 90;
}
while(num / 50 > 0){ //能否减50
s += 'L';
num -= 50;
}
while(num / 40 > 0){ //能否减40
s += "XL";
num -= 40;
}
while(num / 10 > 0){ //能否减10
s += 'X';
num -= 10;
}
while(num / 9 > 0){ //能否减9
s += "IX";
num -= 9;
}
while(num / 5 > 0){ //能否减5
s += 'V';
num -= 5;
}
while(num / 4 > 0){ //能否减4
s += "IV";
num -= 4;
}
while(num > 0){ //剩余的
s += "I";
num--;
}
return s;
}
};
看题解
看思路自己敲
class Solution {
public:
string intToRoman(int num) {
string s = "";
vector<vector<string>> v(10, vector<string>(4)); //建立二维数组,存储罗马数字
//最初提供的罗马数字
v[1][0] = "M";
v[1][1] = "C";
v[1][2] = "X";
v[1][3] = "I";
v[5][1] = "D";
v[5][2] = "L";
v[5][3] = "V";
//建立罗马数字的组合
v[2][0] = "MM";
v[2][1] = "CC";
v[2][2] = "XX";
v[2][3] = "II";
v[3][0] = "MMM";
v[3][1] = "CCC";
v[3][2] = "XXX";
v[3][3] = "III";
v[4][1] = "CD";
v[4][2] = "XL";
v[4][3] = "IV";
v[6][1] = "DC";
v[6][2] = "LX";
v[6][3] = "VI";
v[7][1] = "DCC";
v[7][2] = "LXX";
v[7][3] = "VII";
v[8][1] = "DCCC";
v[8][2] = "LXXX";
v[8][3] = "VIII";
v[9][1] = "CM";
v[9][2] = "XC";
v[9][3] = "IX";
if (num / 1000 > 0) { //千位
s += v[num / 1000][0];
num %= 1000;
}
if (num / 100 > 0) { //百位
s += v[num / 100][1];
num %= 100;
}
if (num / 10 > 0) { //十位
s += v[num / 10][2];
num %= 10;
}
if (num > 0) { //个位
s += v[num][3];
}
return s;
}
};
显然浪费时间在输入建立表上了
这次看了官方代码,再来
class Solution {
public:
string intToRoman(int num) {
const string thousands[] = {"", "M", "MM", "MMM"};
const string hundreds[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
const string tens[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
const string ones[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
return thousands[num / 1000] + hundreds[num / 100 % 10] + tens[num / 10 % 10] + ones[num % 10];
}
};
还是慢了。。。
官方代码
const string thousands[] = {"", "M", "MM", "MMM"};
const string hundreds[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
const string tens[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
const string ones[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
class Solution {
public:
string intToRoman(int num) {
return thousands[num / 1000] + hundreds[num % 1000 / 100] + tens[num % 100 / 10] + ones[num % 10];
}
};
今日总结
玩数学吗,有意思