LeetCode --- RomanToInteger、IntegerToRoman解题分析

来源:互联网 发布:手机淘宝怎么改地址 编辑:程序博客网 时间:2024/05/20 01:09

题目描述:罗马数字转阿拉伯数字,阿拉伯数字转罗马数字,数字的范围是1~3999。

拿到这个题目,首先得明白罗马数字的书写形式及与数字的照关系,如下图所示:


所以,对于罗马数字转阿拉伯数字,可以借用map表中的<key,value>对的格式进行处理

public class Solution {    public int romanToInt(String s) {        char[] symbol = {'I','V','X','L','C','D','M'};int[] value = {1,5,10,50,100,500,1000};Map<Character, Integer> map = new HashMap<Character, Integer>();for(int i=0; i<symbol.length; i++)map.put(symbol[i], value[i]);int len = s.length();int result = 0;if(len < 0) return 0;result += map.get(s.charAt(0));for(int i=1; i<s.length(); i++){int cur = map.get(s.charAt(i));int pre = map.get(s.charAt(i-1));if(cur <= pre){result += cur;}else{result = result + cur - 2*pre;}}return result;    }}

同理,对于阿拉伯数字转罗马数字,考虑到如4、9、40、90、400、900的特殊性,则将这些都放在数组中,然后依次查数组即可:

class Solution {public:    string intToRoman(int num) {      if (num > 3999 || num < 1) return string("The num is out of range!");    const int number[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};    const string symbol[] = { "M", "CM", "D", "CD", "C", "XC","L", "XL", "X", "IX", "V", "IV", "I"};        string roman;    for (size_t i = 0; num > 0; i++)    {    int count = num / number[i];    num %= number[i];    for (; count > 0; count--)    roman += symbol[i];    }        return roman;          }};






0 0
原创粉丝点击