当前位置: 首页 > 科技观察

LeetCode之整数转罗马数字

时间:2023-03-11 21:05:59 科技观察

前言我们社区会持续整理谷一(Netflix成长黑客,《iOS 面试之道》作者,ACE职业健身教练)Swift算法题解法。微博:@古迪道长[1])为文字版,方便大家学习阅读。到目前为止,我们已经更新了11期的LeetCode算法。我们会保持更新时间和进度(周一、周三、周五上午9:00发布)。每期内容不多。希望大家在上班的路上读一读,积累久了会有很大的提升。不积步,无以至万里;不积小流,则不成江海。Swift社区将陪伴您一路前行。难度等级:中1.描述由以下七个字符组成的罗马数字:I、V、X、L、C、D、M。例如,罗马数字2写成II,就是两个并列的1。12写成XII,即X+II。27写作XXVII,即XX+V+II。通常,罗马数字中较小的数字位于较大数字的右侧。但也有例外,比如4不写成IIII,而是写成IV。数字1在数字5的左边,表示的数字等于数字5减去数字1得到的值4。同理,数字9表示为IX。这个特殊规则只适用于以下六种情况:I可以放在V(5)和X(10)的左边代表4和9X可以放在L(50)和C(100)的左边)表示40和90。C可以放在D(500)和M(1000)的左边,表示400和900。给定一个整数,将其转换为罗马数字。2.范例范例1输入:num=3输出:"III"范例2输入:num=4输出:"IV"范例3输入:num=9输出:"IX"范例4输入:num=58输出:"LVIII“解释:L=50,V=5,III=3。示例5输入:num=1994输出:"MCMXCIV"解释:M=1000,CM=900,XC=90,IV=4。约束条件:1<=num<=39993.AnswerclassIntegerToRoman{funcintToRoman(_num:Int)->String{guardnum>0else{return""}letnums=[1000,900,500,400,100,90,50,40,10,9,5,4,1]letsymbols=["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]varres=""vardigit=0varnumber=numwhilenumber>0{letcurrent=number/nums[digit]for_in0..String{guardnum>0else{return""}letthousands=["","M","MM","MMM"]lethundreds=["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"]lettens=["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"]letones=["","I","II","III","IV","V","VI","VII","VIII","IX"]返回千[num/1000]+百[num%1000/100]+十[num%100/10]+ones[num%10]}}主要思想:符号从大到小相加,同时相减相对数[2]点击转LeetCode[3]练习参考资料[1]@古谣道长:https://m.weibo.cn/u/1827884772[2]LeetCode-Swift:https://github.com/soapyigu/LeetCode-Swift[3]LeetCode:https://leetcode.com/problems/integer-罗马