zoukankan      html  css  js  c++  java
  • 13. Roman to Integer[E]罗马数字转整数

    题目


    Given a roman numeral, convert it to an integer.
    Input is guaranteed to be within the range from 1 to 3999.

    思路


    在进行罗马数字转化为整数的过程中,由于罗马数字是按照从左往右从大到小的顺序排列,于是可以分析,当左边罗马数字对应的整数A比右边一个罗马数字对应的整数B小的时候,表示B-A。
    利用map建立一个罗马数字与整数的对应映射,检查字符串当前字符与下一个字符对应整数的大小关系。
    这种建立查找表的题可以通过map来解决。

    Tips


    Map(C++)

    1. 定义
    所有元素都是pair,同时拥有键值(key)和实值(value),第一个元素作为键值keymap不允许有相同的键值,第二个值是key对应的value值。key和value可以是任意需要的类型。
    2. 构造函数
    map<int, string> newMap;
    3. 添加数据

    map<int, string> newMap;
    pair<int , string> add(1,"a");
    newMap.insert(add);
    

    for循环(python)

    1. 循环定义
    for anElement in object:
    对象Object是一个集合,可以遍历每一个元素
    2. 利用range生成整数序列

    • 三个参数:起始值、终值、步长
      • 起始值如果不提供则默认为0
      • 终值是必须的参数,如果只有一个参数,那么该参数就是终值
      • 步长默认为1,只有提供三个参数时,才有步长值
    range(5)
    [0, 1, 2, 3, 4]
    range(3,8)
    [3, 4, 5, 6, 7]
    range(1,20,4)
    [1, 5, 9, 13, 17]
    

    3. 不能改变变量值
    在python中,for循环相当于一个迭代器,在循环体改变循环变量的值对循环次数是没有影响的。因此,对于需要改变变量值的,可以改用while循环。

    词典结构(python)

    利用查找键值来查找对应的实值

    C++

    class Solution {
    public:
        int romanToInt(string s) {
            map<char, int> table={{'I', 1}, {'V', 5}, {'X',10}, {'L', 50}, {'C',100}, {'D', 500}, {'M', 1000}};
            int resVal = 0;
            
            for(int i= 0; i < s.length(); i++){
                if(i+1 <s.length() && table[s.at(i)] < table[s.at(i+1)]){
                    resVal += table[s.at(i+1)] - table[s.at(i)];
                    i++;
                    continue;
                }
                resVal += table[s.at(i)]; 
            }
            return resVal;
        }
    };
    

    Python

     def romanToInt(self, s):
            """
            :type s: str
            :rtype: int
            """
            table = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
            resInt = 0
            i = 0
            while i < len(s):
                if i > 0 and  table[s[i]] >  table[s[i - 1]]:
                    resInt +=  table[s[i]] - 2 *  table[s[i - 1]]
                else:
                    resInt +=  table[s[i]]
                i += 1
            return resInt
    
  • 相关阅读:
    工作流 —— AWS
    ant design —— form 生成 嵌套json数据
    react 获取子组件的 state (转发)
    React 调用子组件的函数(函数)
    react js 组件传参(转发)
    链接脚本文件(.ld .lds)详解
    gcc ------ -ffunction-sections -fdata-sections -gc-sections 参数详解
    GNU ARM 汇编伪指令
    STM32 CM3/CM4 ------ startup.s 文件分析 ------ GCC RT-Thread Studio 版本
    __attribute__之section详解 ------ 把函数指定到具体某个section 之 RT-thread 实例详解
  • 原文地址:https://www.cnblogs.com/Jessey-Ge/p/10993464.html
Copyright © 2011-2022 走看看