不知哪个大佬说过: 关于字符串的题都可以用指针或哈希解决。

      罗马数字转数字:

      思想: 我们能观察到规律: 一般情况下,表示大的字母在前,小字母在后;

                  特殊情况下,小字母会在大字母之前,但是相应的,得到的值会是大字母-小字母

         所以,我们可以用哈希表映射大小,利用哈希表比较所给罗马字母,一般情况直接+该对应值,否则-该对应值

class Solution {
public:
//用哈希表映射字符,处理特殊条件:前字母<后字母==前字母变负数
int romanToInt(string s) {
map<char,int> hash;
hash['I'] = ;
hash['V'] = ;
hash['X'] = ;
hash['L'] = ;
hash['C'] = ;
hash['D'] = ;
hash['M'] = ; int sum = ;
for(int i = ;i<s.size();++i)
{
if(hash[s[i]] < hash[s[i+]])
{
sum-=hash[s[i]];
continue;
}
sum+=hash[s[i]];
} return sum;
}
};

      数字转罗马数字:

      思想 : 这道题关键是用贪心算法,尽量使用少的字母来表示最大的数,然后要观察规律,从大到小找到那些必要罗马数(该罗马数不能被前面的罗马数相加得到)

      所以,我们先建立必要罗马数表,再用贪心思想进行计算。

class Solution {
public:
//贪心算法:尽量使用最少的字符,从最大的开始
string intToRoman(int num) {
map<int,string> mapRom = {{,"I"},{,"IV"},{,"V"},{,"IX"},
{,"X"},{,"XL"},{,"L"}, {,"XC"},
{,"C"},{,"CD"},{,"D"},
{,"CM"}, {,"M"} };
auto r_iter = mapRom.rbegin(); string ret; while(num> && r_iter!=mapRom.rend())
{
if(num >= r_iter->first)
{
ret += r_iter->second;
num-= r_iter->first;
}
else
r_iter++;
}
return ret; }
};

leetcode 罗马数字和数字的互相转换的更多相关文章

  1. leetcode 12题 数字转罗马数字

    leetcode 12题 数字转罗马数字 答案一:我的代码 代码本地运行完全正确,在线运行出错 class Solution { public: string intToRoman(int num) ...

  2. JAVA将数字字符串强制转换成整型变量----求参数之和实验代码(附流程图)

    一.设计思想 先将参数个数输出,并利用循环结果将参数逐个输出,再将字符串强制转化成整型,利用循环结构相加求和 二.程序流程图 三.源程序代码 package demo; public class Co ...

  3. C#单纯的字母数字ASCII码转换

    字母转换成数字 byte[] array = new byte[1];   //定义一组数组array            array = System.Text.Encoding.ASCII.Ge ...

  4. JavaScript学习笔记3之 数组 & arguments(参数对象)& 数字和字符串转换 & innerText/innerHTML & 鼠标事件

    一.Array数组 1.数组初始化(Array属于对象类型) /*关于数组的初始化*/ //1.创建 Array 对象--方法1: var arr1=[]; arr1[0]='aa';//给数组元素赋 ...

  5. 5.单行函数,多行函数,字符函数,数字函数,日期函数,数据类型转换,数字和字符串转换,通用函数(case和decode)

     1  多行函数(理解:有多个输入,但仅仅输出1个结果) SQL>select count(*) from emp; COUNT(*) ------------- 14 B 字符函数Lowe ...

  6. C++字符串类型和数字之间的转换

    转载:http://www.cnblogs.com/luxiaoxun/archive/2012/08/03/2621803.html 1.字符串数字之间的转换 字符串---字符数组(1)string ...

  7. C/C++中字符串与数字之间的转换

    主要有两种方式:C 中能够使用 sprintf 将数字转为字符数组,sscanf 将字符数组转为数字:而在 C++ 中不仅能够使用 C 中的方法,还能够使用 stringstream 实现字符串与数字 ...

  8. kotlin字符串和数字之间的转换和人机交互

    继续基础学习~ 字符串和数字之间的转换 那如何转换呢,其实很简单: 编译木有报错,但是运行: 所以这里了解下. 人机交互 看这标题貌似高端的,其实也就是程序可以接受键盘的输入啦,下面开始: 首先提示用 ...

  9. python学习笔记(3) -- 字符与数字之间的转换函数

    转载:python中的字符数字之间的转换函数 int(x [,base ])         将x转换为一个整数     long(x [,base ])        将x转换为一个长整数     ...

随机推荐

  1. learning scala zipAll

    If two Iterables aren't the same size, then zipAll can provide fillers for what it couldn't find a c ...

  2. Python爬虫 | 多线程、多进程、协程

    对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了 ...

  3. Windbg命令脚本流程控制语句详解

    在Windbg命令脚本一文里,我们介绍了命令脚本语言的的组成要素,在本文里将对语句进行展开的讲解.这些语句主要是流程控制的语句,比如我们常见的条件分子和循环语句等. ; (命令分隔符) 分号(:)字符 ...

  4. HTML5 Geolocation(地理定位)

    一.背景 在HTML规范中,增加了获取用户地理信息的API,这样使得可以基于用户位置开发互联网应用,即基于位置服务 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的. Inter ...

  5. Cesium 加载天地图

    网上有很多 就是没说 加载天地图需要开发者秘钥,这个需要去天地图官网申请一个就可以了,下面贴上源码 还有就是Cesium也是需要token的哈 <!DOCTYPE html> <ht ...

  6. [300iq contest1-J]Jealous Split

    题意 有一个非负整数序列\({a_i}\),你要将他分成恰好\(k\)段,记\(s_i\)为第\(i\)段的和,\(m_i\)为第\(i\)段的最大值,你需要保证这种划分方案对任意\(1 \le i ...

  7. Linux 踢掉其他终端用户

    输入W查看信息 root@HAN:~# w 09:02:36 up 8 days, 20:10, 1 user, load average: 0.00, 0.00, 0.00 USER TTY FRO ...

  8. Docker部署web项目-war包

    一.部署springmvc(war包)项目 1.手工方式 ①搜索tomcat镜像 docker search tomcat ②拉取tomcat基础镜像至本地仓库 docker pull tomcat ...

  9. Java_jdbc 基础笔记之九 数据库连接 (查询Customer对象的方法)

    /** * * 写一个查询Customer对象的方法 * */ public Customer getCustomer(String sql, Object... args) { Customer c ...

  10. http各类型请求方法工具总结

    本文为博主原创,未经允许不得转载: 在项目中会用到各种类型的http请求,包含put,get,post,delete,formData等各种请求方式,在这里总结一下 用过比较好的请求工具,使用serv ...