博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Swift]LeetCode13. 罗马数字转整数 | Roman to Integer
阅读量:4908 次
发布时间:2019-06-11

本文共 5437 字,大约阅读时间需要 18 分钟。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝()
➤GitHub地址:
➤原文地址: 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

Roman numerals are represented by seven different symbols: IVXLCD and M.

Symbol       ValueI             1V             5X             10L             50C             100D             500M             1000

For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.

Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:

  • I can be placed before V (5) and X (10) to make 4 and 9. 
  • X can be placed before L (50) and C (100) to make 40 and 90. 
  • C can be placed before D (500) and M (1000) to make 400 and 900.

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

Example 1:

Input: "III"Output: 3

Example 2:

Input: "IV"Output: 4

Example 3:

Input: "IX"Output: 9

Example 4:

Input: "LVIII"Output: 58Explanation: C = 100, L = 50, XXX = 30 and III = 3.

Example 5:

Input: "MCMXCIV"Output: 1994Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

罗马数字包含以下七种字符:I, V, X, LCD 和 M

字符          数值I             1V             5X             10L             50C             100D             500M             1000

例如, 罗马数字 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 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

示例 1:

输入: "III"输出: 3

示例 2:

输入: "IV"输出: 4

示例 3:

输入: "IX"输出: 9

示例 4:

输入: "LVIII"输出: 58解释: C = 100, L = 50, XXX = 30, III = 3.

示例 5:

输入: "MCMXCIV"输出: 1994解释: M = 1000, CM = 900, XC = 90, IV = 4.

 
1 class Solution { 2     func romanToInt(_ s: String) -> Int { 3         //用字典存对照表,单引号字符串查找使用双引号 4         var map:[Character:Int]=["I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000] 5         //定义局部变量 6         var ret :Int = 0 7         //判断字符串是否为空 8         if !s.isEmpty 9         {10             //遍历字符串,indices属性可以访问字符串中各个字符的所有索引。11             for keys:String.Index in s.indices12             {13                 //注意判断keys的范围只能到倒数第二位14                 if   keys < s.index(before: s.endIndex) 15                      && map[s[keys]]! < map[s[s.index(after: keys)]]!16                 {17                     ret -= map[s[keys]]!18                 }19                 else20                 {21                     ret += map[s[keys]]!22                 }23             }24         }25         return ret26     }27 }

 


高效率版

1 class Solution { 2     func romanToInt(_ s: String) -> Int { 3         var count = 0 4         var index = s.startIndex 5         while index != s.endIndex { 6             let c = s[index] 7             if c == "I" { 8                 if s.index(after: index) != s.endIndex && s[s.index(after: index)] == "V" { 9                     count += 410                     index = s.index(after: index)11                 } else if s.index(after: index) != s.endIndex && s[s.index(after: index)] == "X" {12                     count += 913                     index = s.index(after: index)14                 } else {15                     count += 116                 }17                 index = s.index(after: index)18             } else if c == "X" {19                 if s.index(after: index) != s.endIndex && s[s.index(after: index)] == "L" {20                     count += 4021                     index = s.index(after: index)22                 } else if s.index(after: index) != s.endIndex && s[s.index(after: index)] == "C" {23                     count += 9024                     index = s.index(after: index)25                 } else {26                     count += 1027                 }28                 index = s.index(after: index)29             } else if c == "C" {30                 if s.index(after: index) != s.endIndex && s[s.index(after: index)] == "D" {31                     count += 40032                     index = s.index(after: index)33                 } else if s.index(after: index) != s.endIndex && s[s.index(after: index)] == "M" {34                     count += 90035                     index = s.index(after: index)36                 } else {37                     count += 10038                 }39                 index = s.index(after: index)40             } else if c == "V" {41                 count += 542                 index = s.index(after: index)43             } else if c == "L" {44                 count += 5045                 index = s.index(after: index)46             } else if c == "D" {47                 count += 50048                 index = s.index(after: index)49             } else if c == "M" {50                 count += 100051                 index = s.index(after: index)52             }53         }54         return count55     }56 }

转载于:https://www.cnblogs.com/strengthen/p/9697900.html

你可能感兴趣的文章
verilog RTL 编程实践之五
查看>>
spi协议及工作原理分析
查看>>
c++ eof()函数
查看>>
查看人人网非好友的状态
查看>>
基于jeasyui的遮罩扩展[修复链式bug]
查看>>
2:Node.js 创建HTTP服务器
查看>>
PerfMon.exe通过命令管理计数器
查看>>
MCV3 添加视图的时候,如果强类型视图找不到Model
查看>>
python3 logging
查看>>
HDU - 1069 Monkey and Banana
查看>>
iTOP-4418开发板所用核心板研发7寸/10.1寸安卓触控一体机
查看>>
线程池
查看>>
全面具体介绍一个P2P网贷领域的ERP系统的主要功能
查看>>
「不啰嗦」和「说清楚」-20141223早读课
查看>>
怎样用Google APIs和Google的应用系统进行集成(2)----Google APIs的全部的RESTFul服务一览...
查看>>
MySQL优化建议
查看>>
js 中中括号,大括号使用详解
查看>>
读入Excel大文件解决方法
查看>>
几种流行Webservice框架性能对照
查看>>
MySQL基准测试
查看>>