[leetcode]罗马数字和阿拉伯数字相互转换

罗马转阿拉伯

public int romanToInt(String s) {
        /*
        从左到右依次根据哈希表进行加法
        如果是“CM”900这种情况就要执行+M和-C处理
         */
        if (s.length()==0) return 0;
        Map<Character,Integer> map = new HashMap<>();
        map.put(‘I‘, 1);
        map.put(‘V‘, 5);
        map.put(‘X‘, 10);
        map.put(‘L‘, 50);
        map.put(‘C‘, 100);
        map.put(‘D‘, 500);
        map.put(‘M‘, 1000);
        int res = 0;
        res+=map.get(s.charAt(0));
        for (int i = 1; i < s.length(); i++) {
            char c = s.charAt(i);
            if (map.get(s.charAt(i-1))<map.get(c))
            {
                //*2的原因是上次误加了一次
                res = res+map.get(c)-map.get(s.charAt(i-1))*2;
            }
            else res+=map.get(c);
        }
        return res;
    }

阿拉伯转罗马

public String intToRoman(int num) {
        /*
        制表,贪心,每次取最大的
         */
        String[] symbol={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        int[] value=    {1000,900,500,400, 100, 90,  50, 40,  10, 9,   5,  4,   1};
        String res = "";
        for (int i = 0;num>0; i++) {
            while (num>=value[i])
            {
                num-=value[i];
                res+=symbol[i];
            }
        }
        return res;
    }

原文地址:https://www.cnblogs.com/stAr-1/p/8466092.html

时间: 2024-10-05 09:19:22

[leetcode]罗马数字和阿拉伯数字相互转换的相关文章

Leetcode——罗马数字和阿拉伯数字的转换

说实话,这两道在leetcode上标记为中等和简单的题却让我蛋疼了半天.可能是因为先天对阿拉伯数字不熟悉的关系,所以在做两道题的居然没有一点感觉!!!!! 将罗马数字转化为阿拉伯数字比较简单:从左向右扫描整个字符串既可,只有在前一个数字比后一个数字小的时候需要做特殊处理(需要做减法). class Solution  { public: int romanToInt(string s) { if (s.empty()) { return 0; } int letter[256]; for (in

罗马数字与阿拉伯数字相互转换

罗马数字规则简明 1. 罗马单个数字共有7个,即I(1).V(5).X(10).L(50).C(100).D(500)和M(1000)2.一个罗马数字重复几次,就表示这个数的几倍.但同一数码不能出现三次以上.3.遵循右加左减的规则.左减的数字有限制,仅限于I.X.C.比如45不可以写成VL,只能是XLV但是,左减时不可跨越一个位数.比如,99不可以用IC(100 - 1)表示,而是用XCIX([100 - 10] + [10 - 1])表示.(等同于阿拉伯数字每位数字分别表示.)左减数字必须为一

LeetCode 13.Roman to Integer 罗马数字转阿拉伯数字

对于罗马数字转阿拉伯数字切入点有两个: 1.小数字出现在大数字前面只能使用一个(例如IV正确,IIV就是错误的) 2.除了情况1之外直接使用累加就ok 1 public int romanToInt(String s){ 2 if(s.length() < 1){ 3 return 0; 4 } 5 int result = 0; 6 for(int i=0;i<s.length();i++){ 7 result += getRomanValue(s.charAt(i)); 8 if(i<

58. 分析、测试与总结:罗马数字和阿拉伯数字的转换[roman to integer and integer to roman in c++]

[本文链接] http://www.cnblogs.com/hellogiser/p/roman-to-integer-and-integer-to-roman.html [题目] 给出一个罗马数字,转换为阿拉伯数字.本题只考虑3999以内的数. 罗马数字有如下符号: Ⅰ(1)Ⅴ(5)Ⅹ(10)L(50)C(100)D(500)M(1000) 计数规则: (1).若干相同数字连写表示的数是这些罗马数字的和,如III=3: (2).小数字在大数字前面表示的数是用大数字减去小数字,如IV=4: (3

罗马数字转阿拉伯数字

罗马数字转阿拉伯数字 1.罗马数字是位置计数吗?它的缺点是什么? 答:罗马数字不是位置技术,他的缺点:书写困难,规则繁杂,没有数字0 罗马数字包含以下七种字符:I, V, X, L,C,D 和 M.(python) 字符          数值 I             1 V             5 X             10 L             50 C             100 D             500 M             1000 2.将学号2

罗马数字转为阿拉伯数字

1 /* I:1 ; V-5;X-10;L-50;C-100;D-500;M-1000*/ 2 class Solution{ 3 vector<string> tokens; 4 vector<char> token_value; 5 public: 6 /*divide the string into some tokens,every token including same char*/ 7 void token(string s) 8 { 9 string::iterat

[LeetCode]题解(python):012-Integer to Roman

题目来源: https://leetcode.com/problems/integer-to-roman/ 题意分析: 这道题是要把在区间[1-3999]的数字转化成罗马数字. 题目思路: 只要知道了罗马数字和阿拉伯数字是怎么转换的就不难了,要注意的是900,500,400,90,50,40,9,5,4分别应该是‘CM’,‘D’,‘CD’,‘XC’,‘L’,‘XL’,‘IX’,‘V’,‘IV’. 代码(python): 1 class Solution(object): 2 def intToR

[leetcode]_Roman to Integer

题目:给定一个罗马数字串,转换为一个整数. 一开始没理解,以为是string to int.后来理解:罗马数字与阿拉伯数字的映射关系,见下图: 至此,题目的意思才掌握明白,用程序模拟这张表. 无可置否,需要将这张表的映射关系存进一个map中,对输入的string查找map中的映射关系. 先贴上代码:(注:substring(startIndex,endIndex) 截取的子字符串是从startIndex处到endIndex-1处为止的) public int romanToInt(String

[LeetCode][JavaScript]Roman to Integer

Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. https://leetcode.com/problems/roman-to-integer/ 罗马数字转阿拉伯数字. 从后往前扫,如果当前的数大于之前的数,加上这个数,反之减去当前的数. 1 /** 2 * @param {string} s 3