zoukankan      html  css  js  c++  java
  • 13. Roman to Integer

    欢迎fork and star:Nowcoder-Repository-github

    13. Roman to Integer

    题目

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

    解析:

    • 给定 "DCXXI"字符串,从左向右走,左边是高位
    • 需要用到map数据结构,来将罗马数字的字母转化为对应的整数值,因为输入的一定是罗马数字,那么我们只要考虑两种情况即可:
    • 第一,如果当前数字是最后一个数字,或者之后的数字比它小的话,则加上当前数字;第二,其他情况则减去这个数字
    class Solution_13 {
    public:
    	int romanToInt(string s) { // "DCXXI"  "MCMXCVI"
    		int ret = 0;
    		unordered_map<char, int> mp{ { 'I', 1 }, { 'V', 5 }, { 'X', 10 }, { 'L', 50 }, { 'C', 100 }, { 'D', 500 }, { 'M', 1000 } };
    		ret = mp[s[s.size()-1]];
    		for (int i = s.size()-2; i >=0; --i)  // 从后往前走 //或者从前往后走,都是当前和之后的数字比较
    		{
    			if (mp[s[i]] >= mp[s[i+1]]) 
    			{
    				ret += mp[s[i]];
    			}
    			else
    			{
    				ret -= mp[s[i]]; //"CM":100-100=900
    			}
    		}
    		return ret;
    	}
    };
    
    - 当前和之前的数字比较,则需要减去之前多加的一次
    - 我们也可以每次跟前面的数字比较,如果小于等于前面的数字,我们先加上当前的数字,如果大于的前面的数字,我们加上当前的数字减去二倍前面的数字,这样可以把在上一个循环多加数减掉
    
    class Solution {
    public:
        int romanToInt(string s) {
            int res = 0;
            unordered_map<char, int> m{{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}};
            for (int i = 0; i < s.size(); ++i) {
                if (i == 0 || m[s[i]] <= m[s[i - 1]]) res += m[s[i]];
                else res += m[s[i]] - 2 * m[s[i - 1]];
            }
            return res;
        }
    };
    

    题目来源

  • 相关阅读:
    HUB_mysql学习笔记
    SQL学习笔记
    java_cmd_命令行
    JavaScript_2016_8_28
    linux mysql 安装配置
    solr 添加索引
    solr 查询 实例分析
    solr update接口常用方法
    solr schema.xml文档节点配置
    solr4.5安装配置 linux+tomcat6.0+mmseg4j-1.9.1分词
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8312900.html
Copyright © 2011-2022 走看看