Home > Blockchain >  I'm trying to convert integer to roman in Dart
I'm trying to convert integer to roman in Dart

Time:10-19

I'm new to Dart. I was trying to convert integer to roman. But It returns nothing. Can you guys help me? here is my code sample. this code is from the Leetcode problem section.

class Solution {
  String intToRoman(int num) {
       List<int> numbers = [1,4,5,9,10,40,50,90,100,400,500,900,1000];
       List<String> romans = ["I","IV","V","IX","X","XL","L","XC","C","CD","D","CM", "M"];
       int index = romans.length - 1;
       String roman = '';
      
      for(num >0;numbers[index]<=num;){
          roman  = romans[index];
          num -= numbers[index];
          index -= 1;
      }
      
      return roman;
  }
    
}

CodePudding user response:

just change a little bit on the logic .try on dartpad: https://dartpad.dev/?id

void main() {

print (intToRoman(30)); // result: XXX

}

 String intToRoman(int num) {
   List<int> numbers = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
   List<String> romans = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"];
      
   String roman = '';
      
   for (int i = 0; i < numbers.length; i  ) {
     while (num >= numbers[i]) {
      roman  = romans[i];
      num -= numbers[i];
    }
   }
      
   return roman;
}

CodePudding user response:

This solution is based on Wiki:

class Solution {
  /// digit: 3=Thousands(10³), 2=Hundreds(10²), 1=Tens(10), 0=Units(1)
  /// Range for roman numerals: 1...3999
  static final romanNumerals = <int,Map<int,String>>{
    1 : {3:'M', 2:'C', 1:'X', 0:'I'},
    2 : {3:'MM', 2:'CC', 1:'XX', 0:'II'},
    3 : {3:'MMM', 2:'CCC', 1:'XXX', 0:'III'},
    4 : {2:'CD', 1:'XL', 0:'IV'},
    5 : {2:'D', 1:'L', 0:'V'},
    6 : {2:'DC', 1:'LX', 0:'VI'},
    7 : {2:'DCC', 1:'LXX', 0:'VII'},
    8 : {2:'DCCC', 1:'LXXX', 0:'VIII'},
    9 : {2:'CM', 1:'XC', 0:'IX'},
  };
  /* ---------------------------------------------------------------------------- */
  Solution();
  /* ---------------------------------------------------------------------------- */
  String intToRoman(int number) {
    if (number < 1 || number >= 4000) return '';
    
    var list = number.toString().split('').map(int.parse).toList();
    var buffer = StringBuffer();
    final len = list.length;
    
    for (var i = 0; i < len; i  ) {
      var digit = list[i];
      if (digit == 0) continue;
      buffer.write(romanNumerals[digit]![len - 1 - i]);
    }

    return buffer.toString();
  }
  /* ---------------------------------------------------------------------------- */
  void intToRoman2(int number) {
    print(intToRoman(number));
  }
}

void main(List<String> args) {
  Solution()
  ..intToRoman2(3)
  ..intToRoman2(58)
  ..intToRoman2(1994)
  ;
}

Output:

III
LVIII
MCMXCIV

This code was already sent to LeetCode with the following results:

Runtime: 1130 ms, faster than 27.96% of Dart online submissions for Integer to Roman.
Memory Usage: 150.5 MB, less than 44.09% of Dart online submissions for Integer to Roman.

CodePudding user response:

why not use the simple way?

I use this extension to convert english numbers to persian numbers

extension StringExtensions on String {
  String persianNumber() {
    String number = this;
    number = number.replaceAll("1", "۱");
    number = number.replaceAll("2", "۲");
    number = number.replaceAll("3", "۳");
    number = number.replaceAll("4", "۴");
    number = number.replaceAll("5", "۵");
    number = number.replaceAll("6", "۶");
    number = number.replaceAll("7", "۷");
    number = number.replaceAll("8", "۸");
    number = number.replaceAll("9", "۹");
    number = number.replaceAll("0", "۰");
    return number;
  }
}

extension IntExtensions on int {
  String persianNumber() {
    String number = this.toString();
    number = number.replaceAll("1", "۱");
    number = number.replaceAll("2", "۲");
    number = number.replaceAll("3", "۳");
    number = number.replaceAll("4", "۴");
    number = number.replaceAll("5", "۵");
    number = number.replaceAll("6", "۶");
    number = number.replaceAll("7", "۷");
    number = number.replaceAll("8", "۸");
    number = number.replaceAll("9", "۹");
    number = number.replaceAll("0", "۰");
    return number;
  }
}
  •  Tags:  
  • dart
  • Related