// 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 List3. Similar Onesdigits = 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(); }
(E) Roman to Integer
(M) Integer to English Words
No comments:
Post a Comment