Golang:
思路:
首先,用一个map
来存储字母和对应的数值,然后依次读取字符串里的字符,然后去map
里寻值。根据规则,我们在对s
的第i
位取值时需要考虑第i+1
位的情况
func romanToInt(s string) int{
res:=0
r2i:= map[byte]int{'I': 1, 'V': 5,'X':10,'L':50,'C':100,'D':500,'M':1000}
for i:=0; i<len(s);i++ {
if i!=len(s)-1{
if r2i[s[i]]<r2i[s[i+1]]{
res-=r2i[s[i]]
}else{
res+=r2i[s[i]]
}
}else{
res+=r2i[s[i]]
}
}
return res
}
PS:这里也可以对字符串从后往前读取,使用一个temp
来记录当前出现过的最大字符单位值,接下来,每遇见比temp
小的就减去,跟它相等或比它大的则加上,并且更新temp
。
有疑问加站长微信联系(非本文作者)