Решение задачи преобразования римских цифр в целые числа на LeetCode (Go): пошаговое руководство

Решение задачи преобразования римских цифр в целые числа на LeetCode (Go): пошаговое руководство

Решение задачи преобразования римских цифр в целые числа на LeetCode (Go): пошаговое руководство

Введение

Задача преобразования римских цифр в целые числа является распространённой задачей по алгоритмам и структурам данных, которую часто можно встретить в технических собеседованиях и на соревновательных сайтах по программированию, таких как LeetCode. В этой статье мы подробно рассмотрим эту задачу и предоставим подробное пошаговое руководство по её решению на языке программирования Go.

Постановка задачи

Задача преобразования римских цифр в целые числа заключается в следующем: дана строка, содержащая римские цифры, необходимо преобразовать её в соответствующее целое число. Римские цифры представлены следующими символами:

Символ Значение
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

Например, римское число "III" представляет собой целое число 3, а "IX" представляет собой целое число 9.

Алгоритм решения

Алгоритм решения задачи можно разделить на следующие шаги:

  1. Прочитать строку римских цифр и преобразовать её в массив символов.
  2. Итерировать по массиву символов справа налево.
  3. Для каждого символа получить его значение из таблицы соответствий, представленной выше.
  4. Добавить значение текущего символа к результату, если он не меньше значения предыдущего символа.
  5. Если значение текущего символа меньше значения предыдущего символа, вычесть значение текущего символа из результата.

Реализация на Go

Ниже приведён пример реализации алгоритма на языке Go:

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func romanToInt(s string) int {
	// Преобразовать строку римских цифр в массив символов.
	chars := strings.Split(s, "")

	// Итерировать по массиву символов справа налево.
	result := 0
	for i := len(chars) - 1; i >= 0; i-- {
		// Получить значение символа из таблицы соответствий.
		value, err := strconv.Atoi(romanToIntMap[chars[i]])
		if err != nil {
			fmt.Println("Неверный символ римского числа:", chars[i])
			return -1
		}

		// Добавить значение текущего символа к результату, если он не меньше значения предыдущего символа.
		if i != 0 && value < result {
			result -= value
		} else {
			result += value
		}
	}

	// Вернуть результат.
	return result
}

// Таблица соответствий римских цифр и целых чисел.
var romanToIntMap = map[string]string{
	"I": "1",
	"V": "5",
	"X": "10",
	"L": "50",
	"C": "100",
	"D": "500",
	"M": "1000",
}

func main() {
	// Тестовые примеры.
	tests := []string{"III", "IX", "LVIII", "MCMXCIV"}

	for _, test := range tests {
		result := romanToInt(test)
		fmt.Printf("%s = %d\n", test, result)
	}
}

Заключение

В этой статье мы рассмотрели задачу преобразования римских цифр в целые числа и предоставили подробное пошаговое руководство по её решению на языке программирования Go. Реализация алгоритма с использованием языка Go проста и понятна, что делает его отличным выбором для решения этой задачи.

To leave a comment you need to Login / Create account