首页 > 其他分享 >力扣(leetcode) 12. 整数转罗马数字 (哈希映射表解法)、(暴力匹配)

力扣(leetcode) 12. 整数转罗马数字 (哈希映射表解法)、(暴力匹配)

时间:2022-10-27 20:00:56浏览次数:46  
标签:12 key res 力扣 罗马数字 num 哈希 100 1000


题目:https://leetcode-cn.com/problems/integer-to-roman/

题目很好理解,并且容易想到解法。题目要求输入范围是1-3999

可以理解为 在每一位上找到相应的罗马数字表示即可
比如1954:
在1000上找到对应的罗马数字 ‘M’
然后去掉1那一位:在900上找到对应的罗马数字 ’CM‘
然后去掉9那一位:在50上找到对应的罗马数字 ’L‘
然后去掉5那一位: 在4上找到对应的罗马数字 ‘IV’
这样就可以得到1994对应的罗马数字为 ’MCMLIV‘

将每一位的所有可能列成一个列表 也不多


比较容易想的一个解法(暴力匹配)


// An highlighted block
Q = ['','M','MM','MMM']
# 1000,2000,3000
B = ['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM']
# 100-900
S = ['','X','XX','XXX','XL','L','LX','LXX','LXXX','XC']
# 10-90
G = ['','I','II','III','IV','V','VI','VII','VIII','IX']
# 1-9

然后傻瓜式取值拼接:

// An highlighted block
num = 1994
temp = num
qw = num//1000 # 算出千位的值
num = num%1000 # 除掉千位数
bw = num//100 # 算出百位的值
num = num%100 # 除掉百位数
sw = num//10 # 算出十位的值
gw = num%10 # 算个位的值
res = Q[qw ] + B[bw ] + S[sw ] + G[gw ] # 得出结论
print(res)

上面的列表设置的时候都将第0个位置设置为空
因为~~~ 假如遇到900这样的数 ,取千位值的时候 qw=900//1000=0
如果列表第一个数 0位没有设置为空,这时候Q[qw]取0位变成M了,应该为空才对 .所以前面的列表第0位都设置为空.


哈希表:


在网上学了一个解法~~~~

将所有的组成类型放到哈希表里,匹配哈希表统计次数即可.

比如3425 :
匹配3次的1000 ,1次的400, 2次的100 ,一次的5

力扣(leetcode)  12. 整数转罗马数字 (哈希映射表解法)、(暴力匹配)_取值

// An highlighted block
num = 3425
hashmap = {1000:'M', 900:'CM', 500:'D',
400:'CD', 100:'C', 90:'XC', 50:'L',
40:'XL', 10:'X', 9:'IX', 5:'V', 4:'IV', 1:'I'}
res = ''
for key in hashmap:
if num // key != 0:
count = num // key # 比如输入4000,count 为 4
res += hashmap[key] * count # 查询对应的罗马字符 拼接
num %= key # 降位
print(res)
# 结果输出 MMMCDXXV


标签:12,key,res,力扣,罗马数字,num,哈希,100,1000
From: https://blog.51cto.com/u_15849381/5801759

相关文章

  • 力扣(leetcode) 692. 前K个高频单词
    题目:https://leetcode-cn.com/problems/top-k-frequent-words/这个题用python解起来还是挺简单的,用字典就行了。key存单词value存出现的次数dic={}res=[]foriinr......
  • uva11235
    给一个非降序的排列{a},多次询问区间(l,r)中出现次数最大的值,输出这个次数 比如12668881023 相同的数据靠在一起,我们将相同数据组成一块(要处理出这个块的信......
  • localhost与127.0.0.1的区别
    127.0.0.1与localhost的区别很多人会接触到这个IP地址127.0.0.1。也许你会问127.0.0.1是什么地址?其实127.0.0.1是一个回送地址,指本地机,一般用来测试使用。大家常用来pi......
  • 哈希表——快乐数
    #include<iostream>#include<unordered_set>usingnamespacestd;//取数值各个位上的单数平方之和intgetSum(intn){ intsum=0; while(n) { sum+=(n%......
  • Win server 2012R2 DNS占用大量端口侦听的解决方式
    请运行一下下面的命令查看DNS服务占用的端口数量:netstat-anb|find/C"dns.exe"server2016上:server2012R2上:之后运行以下的命令修改DNSsocketpoolsize的大小,......
  • 力扣-4-寻找两个正序数组的中位数
    中位数的定义是什么?有序数列中位置中间的数字如果中间位置有两个返回则他们的平均值,所以这里的返回值是个double要求时间复杂度为log(m+n),也就是说只对两个数组做一次遍......
  • 洛谷P3225 [HNOI2012]矿场搭建
    SLOJH7136.「HNOI2012」矿场搭建题目描述煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援......
  • 力扣 107. 二叉树的层序遍历 II
    107.二叉树的层序遍历II给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)示例1:输入:r......
  • [CTFSHOW]中期测评WP(差512和514)
    文章目录​​前言​​​​web486​​​​web487​​​​web488​​​​web489​​​​web490​​​​web491​​​​web492​​​​web493​​​​web494​​​​web495​​......
  • Flutter 12 个小技巧
    Flutter12个小技巧你好,朋友...希望你做得很好!今天的我要分享一些快速提示和技巧在Flutter,这将使你的工作容易!!......