Blog.

罗马数字转整数

Cover Image for 罗马数字转整数
Bernie
Bernie

罗马数字转整数

leetcode 链接

思路:

1.循环遍历字符串,如果当前字符比前一个字符大,则减去前一个字符的值,否则加上前一个字符的值

typescript 解法

function romanToInt(s: string): number {
  const len = s.length;
  let ret = 0;
  let pre = "";
  for (let i = len - 1; i >= 0; i--) {
    const current = s[i];
    if (i < len - 1) {
      pre = s[i + 1];
    }
    if (current === "I") {
      if (pre === "V" || pre === "X") {
        ret -= 1;
      } else {
        ret += 1;
      }
    } else if (current === "V") {
      ret += 5;
    } else if (current === "X") {
      if (pre === "L" || pre === "C") {
        ret -= 10;
      } else {
        ret += 10;
      }
    } else if (current === "L") {
      ret += 50;
    } else if (current === "C") {
      if (pre === "D" || pre === "M") {
        ret -= 100;
      } else {
        ret += 100;
      }
    } else if (current === "D") {
      ret += 500;
    } else if (current === "M") {
      ret += 1000;
    }
  }
  return ret;
}

go 解法

func romanToInt(s string) int {
    lenS := len(s)
    ret := 0
    pre := ""
    for i := lenS - 1; i >= 0; i -- {
        current := string(s[i])
        if i < lenS - 1 {
            pre = string(s[i + 1])
        }
        if current == "I" {
            if pre == "V" || pre == "X" {
                ret -= 1
            } else {
                ret += 1
            }
        } else if current == "V" {
            ret += 5
        } else if current == "X" {
            if pre == "L" || pre == "C" {
                ret -= 10
            } else {
                ret += 10
            }
        } else if current == "L" {
            ret +=50
        } else if current == "C" {
            if pre == "D" || pre == "M" {
                ret -= 100
            } else {
                ret += 100
            }
        } else if current == "D" {
            ret += 500
        } else if current == "M" {
            ret += 1000
        }
    }
    return ret
}