领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

字符串:golang实现罗马数字转整数算法

nixiaole 2025-01-06 14:47:53 知识剖析 14 ℃

题目介绍如下:
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

示例 1:

输入: s = "III"
输出: 3

示例 2:

输入: s = "IV"
输出: 4

示例 3:

输入: s = "IX"
输出: 9

示例 4:

输入: s = "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.

示例 5:

输入: s = "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

我用golang实现的算法全部代码

package main

import (
    "fmt"
    "testing"
)

// 定义一个映射表来存储罗马字符和对应的整数值
var romanToIntMap = map[byte]int{
    'I': 1,
    'V': 5,
    'X': 10,
    'L': 50,
    'C': 100,
    'D': 500,
    'M': 1000,
}

func romanToInt(s string) int {

    total := 0
    prevValue := 0

    for i := len(s) - 1; i >= 0; i-- {
       currentValue := romanToIntMap[s[i]]
       if currentValue >= prevValue {
          total += currentValue
       } else {
          total -= currentValue
       }
       prevValue = currentValue
    }

    return total
}

func TestLm2Int(t *testing.T) {
    // 测试用例
    romanNumerals := []string{"III", "IV", "IX", "LVIII", "MCMXCIV"}
    for _, numeral := range romanNumerals {
       fmt.Printf("罗马数字 %s 转换为整数是 %d\n", numeral, romanToInt(numeral))
    }
}
最近发表
标签列表