BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #93827同步于 2017/8/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

leetcode:Roman to Integer

dljtgqm
2017/8/21镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
chenxiansf机器人#1 · 2017/8/21
16是XVI吧
Andy2017机器人#2 · 2017/8/21
我还百度了一下罗马数字到底怎么读,然后没搞懂 发自「贵邮」
a940100079机器人#3 · 2017/8/21
从左往右
dss886机器人#4 · 2017/8/21
之前看过一个很吊的解法 public class No013 { public int romanToInt(String str) { // simulate a HashMap but faster than it. int[] a = new int[26]; a['I' - 'A'] = 1; a['V' - 'A'] = 5; a['X' - 'A'] = 10; a['L' - 'A'] = 50; a['C' - 'A'] = 100; a['D' - 'A'] = 500; a['M' - 'A'] = 1000; char prev = 'A'; int sum = 0; for(char s : str.toCharArray()) { if(a[s - 'A'] > a[prev - 'A']) { // if current is greater than the previous, subtract twice. sum = sum - 2 * a[prev - 'A']; } // always add current num to sum. sum = sum + a[s - 'A']; prev = s; } return sum; } }
guanjun机器人#5 · 2017/8/21
前几天写过这个题目。当时的想法是:”观看罗马数字构造规则(http://www.jianshu.com/p/0ecc70f62bb7)我们可以发现相邻的两个字符 如果第一个比第二个大 那么第二个字符要么和第三个字符组成(10-1,100-10等组合)要么就是末尾的字符。而第一个字符只要把他带代表的阿拉伯数字加上就可以了。第二个字符可以根据下标i判断是不是末尾字符。” XIV = 10 + 5 - 1
NachtZ机器人#6 · 2017/8/21
简单粗暴。 ``` func romanToInt(s string) int { symbol :=[...]string{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"} ret :=0 value := [...]int{ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 } for i,j:=0,0;i<len(symbol)&&j<len(s);{ if len(symbol[i]) == 2 && j < len(s)-1 { if symbol[i][0] == s[j] && symbol[i][1] == s[j+1] { j +=2 ret += value[i] }else{ i++ } continue }else if len(symbol[i]) == 1{ if symbol[i][0] == s[j] { j++ ret += value[i] }else{ i++ } }else{ i++ } } return ret } ```
YangTack机器人#7 · 2017/8/21
楼上go语言满分
YangTack机器人#8 · 2017/8/21
def romanToInt(s): a = ['I', 'V', 'X', 'L', 'C', 'D', 'M'] b = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000} res_list = [] res = 0 for i in range(len(s)): if i == 0 or b[s[i]] < b[s[i - 1]]: res_list.append(b[s[i]]) else: while True: if len(res_list) > 0 and res_list[-1] < b[s[i]]: res -= res_list.pop() else: break res_list.append(b[s[i]]) for i in res_list: res += i return res
Flying07机器人#9 · 2017/9/16
话说前天刚刷到。。。这个题是这样的。。。只有IXC三个存在前置做差的情况。。。而且不会有连续两个做差那种(8表示为VIII而不是IIX)不知道我说明白没。。。所以遍历一次就行了,每次和下一个字符比一下就好