// NOTE: avoid call stack don't put call within loop
s= 1700 = >"MDCC"
s= 24 => "XXIV"
s= 19 => "XIX"
s= 900=>"CM"
2. Implementation
Q1: care for for number 4 and 9
// NOTE: avoid call stack don't put call within loop
List digits = new ArrayList();
digits.add(num/divisor);
StringBuilder res = new StringBuilder();
res.append( convert(digits.get(0), 'M', '','') );
res.append( convert(digits.get(1), 'C', 'D', 'M') );
res.append( convert(digits.get(2), 'X', 'L', 'C') );
res.append( convert(digits.get(3), 'I', 'V', 'X') );
for (int i = 5; i< digit;i++)
default: //return "";
default: //return "";
// NOTE: return string all in bottom, so just BREAK
default:
break;
(E) Roman to Integer
(M) Integer to English Words
public String intToRoman(int num)
{
//validate the input
if ( num < 0 )
return "";
int divisor = 1000;
// NOTE: use a data structure to store the digits you want to print out
List digits = new ArrayList();
while ( divisor > 0)
{
//int digit = num /divisor;
digits.add(num/divisor);
// NOTE: avoid call stack don't put call within loop
//if ( divisor == 1000 )
//{
// res.append();
//}
//else if ( divisor == 100)
//{
// res.append();
//}
//else if ( divisor =10 )
//{
// res.append();
//}
//else if ( divisor ==1)
//{
// res.append();
//}
//num/=divisor;
num%= divisor;
divisor/=10;
}
StringBuilder res = new StringBuilder();
res.append( convert(digits.get(0), 'M', '','') );
res.append( convert(digits.get(1), 'C', 'D', 'M') );
res.append( convert(digits.get(2), 'X', 'L', 'C') );
res.append( convert(digits.get(3), 'I', 'V', 'X') );
return res.toString();
}
public String convert (int digit, char one, char five, char ten)
{
StringBuilder sb = new StringBuilder();
switch(digit)
{
case 1:
case 2:
case 3:
for ( int i =0; i < digit ; i++)
{
sb.append(one);
}
break;
case 4:
sb.append(one);
sb.append(five);
break;
case 5:
//sb.append(five);
//break;
case 6:
case 7:
case 8:
sb.append(five);
//for (int i=0;i< digit -5;i++)
// NOTE: start from 5 can merge case 5 into here
for (int i = 5; i< digit;i++)
{
sb.append(one);
}
break;
case 9:
sb.append(one);
sb.append(ten);
break;
default:
//return "";
// NOTE: return string all in bottom, so just BREAK
break;
}
return sb.toString();
}
3. Similar Ones(E) Roman to Integer
(M) Integer to English Words
No comments:
Post a Comment