1、题目
2、题解
看到题目首先就想到了遍历每一位字符,然后使用switch-case结构分情况讨论,实现代码如下:
func romanToInt(s string) int {
sum:=0
roman:=[]byte(s)
for key, value:=range roman{
switch value{
case 'I':
if key+1<len(roman)&&(roman[key+1]=='V'||roman[key+1]=='X'){
sum-=1
}else{
sum+=1
}
case 'V': sum+=5
case 'X':
if key+1<len(roman)&&(roman[key+1]=='L'||roman[key+1]=='C'){
sum-=10
}else{
sum+=10
}
case 'L': sum+=50
case 'C':
if key+1<len(roman)&&(roman[key+1]=='D'||roman[key+1]=='M'){
sum-=100
}else{
sum+=100
}
case 'D': sum+=500
case 'M': sum+=1000
default: sum+=0
}
// fmt.Println(value," , ",sum)
}
return sum
}
提交结果如下
感觉这个执行时间比想象的要长好多啊,所以就去看来题解,整体思路差不多,就是可以预先将各个字母及其对应的值存入字典中,比较之后进行加减即可。