> For the complete documentation index, see [llms.txt](https://leetcodebook-1.gitbook.io/top-interview-150/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://leetcodebook-1.gitbook.io/top-interview-150/array-string/roman-to-integer.md).

# 罗马数字转整数

题目链接: <https://leetcode.cn/problems/roman-to-integer>

## 解题思路：

1. 当小值在大值的左边，则减小值，如 `IV=5-1=4`
2. 当小值在大值的右边，则加小值，如 `VI=5+1=6`
3. 由上可知，右值永远为正，因此最后一位必然为正
4. 从左往右遍历，如果当前值小于右边的值，则减去当前值，否则加上当前值
5. 由于最后一位必然为正，因此最后一位必然会加上

```go
var m = map[rune]int{
	'I': 1,    // 1
	'V': 5,    // 5
	'X': 10,   // 10
	'L': 50,   // 50
	'C': 100,  // 100
	'D': 500,  // 500
	'M': 1000, // 1000
}

func romanToInt(s string) int {
	var ans int
	var prev int

	for _, r := range s {
		curr := m[r]
		if curr > prev {
			ans += curr - 2*prev // 如果当前值比前一个值大，则减去前一个值的两倍
		} else {
			ans += curr // 否则加上当前值
		}
		prev = curr // 更新前一个值
	}

	return ans
}
```

## 复杂度分析

* **时间复杂度：** 时间复杂度为 $$O(n)$$，其中`n`是字符串`s`的长度
* **空间复杂度：** 空间复杂度为 $$O(1)$$，因为只需要常数级别的额外空间来存储映射表和一些变量


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://leetcodebook-1.gitbook.io/top-interview-150/array-string/roman-to-integer.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
