【1日1本LeetCode】#12 Integer to Roman
5187 ワード
1日1本のLeetCodeシリーズ
(一)テーマ
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
(二)問題を解く
整形数字をローマ数字に変換するローマ数字は全部で7つあり、すなわちI(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000)の例:I、II、III、IV、V、VII、VII、VIII、VIII、IX、IX、IX、IX、IX、IX、IX、IXは1-11コードを表す.
私のこのコードは肥えているように見えます.beiyeqingtengブロガーのようなネット上の書き方を見ました.
簡単に見えます.
(一)テーマ
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
(二)問題を解く
整形数字をローマ数字に変換するローマ数字は全部で7つあり、すなわちI(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000)の例:I、II、III、IV、V、VII、VII、VIII、VIII、IX、IX、IX、IX、IX、IX、IX、IXは1-11コードを表す.
class Solution {
public:
string intToRoman(int num) {
string str = "";
string roman[8] = {"I","V","X","L","C","D","M"};
int j=0;
while(num)
{
int temp = num%10;
string str_t ="";
if(temp <4)
{
int count = temp;
while(count--) str_t+=roman[j];
}
else if(temp==4)
{
str_t=roman[j];
str_t+=roman[j+1];
}
else if(temp>=5&&temp<=8)
{
str_t+=roman[j+1];
int count = temp-5;
while(count--) str_t+=roman[j];
}
else if(temp==9)
{
str_t+=roman[j];
str_t+=roman[j+2];
}
cout<<roman[j]<<endl;
cout<<str_t<<endl;
str =str_t+str;
j=j+2;
num = num/10;
}
return str;
}
};
私のこのコードは肥えているように見えます.beiyeqingtengブロガーのようなネット上の書き方を見ました.
public class Solution {
public String intToRoman(int number) {
int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
String[] numerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
StringBuilder result = new StringBuilder();
for (int i = 0; i < values.length; i++) {
while (number >= values[i]) {
number -= values[i];
result.append(numerals[i]);
}
}
return result.toString();
}
}
簡単に見えます.