Skip to content

Latest commit

 

History

History
160 lines (136 loc) · 2.83 KB

0013._roman_to_integer.md

File metadata and controls

160 lines (136 loc) · 2.83 KB

Links:

  1. https://leetcode.com/problems/roman-to-integer/
  2. https://leetcode-cn.com/problems/roman-to-integer/

Tags

  1. 数学
  2. 字符串

Solution1:

  1. 用字典作mapping: {roman : integer}
  2. 用ans这个变量保存结果
  3. 遍历罗马数字,如果当前数字小于下一个数字,则ans减去当前数字。反之,则ans加上当前数字。
  4. 最后一个数字无法和下一个数字比较(out of index),但是最后一个数字永远是相加的。
class Solution:
    def romanToInt(self, s):
        mapping = {
            "I": 1,
            "V": 5,
            "X": 10,
            "L": 50,
            "C": 100,
            "D": 500,
            "M": 1000
        }

        ans = 0
        last_int = mapping[s[-1]]
        
        for i in range(len(s) - 1):
            current_roman = s[i]
            next_roman = s[i+1]
            current_int = mapping[current_roman]
            next_int = mapping[next_roman]

            if current_int >= next_int:
                ans += current_int
            else:
                ans -= current_int

        ans += last_int

        return ans

class Solution:
    def romanToInt(self, s):
        mapping = {
            "I": 1,
            "V": 5,
            "X": 10,
            "L": 50,
            "C": 100,
            "D": 500,
            "M": 1000
        }

        ans = 0
        for i, value in enumerate(s[:-1]): # s[:-1] 不同于 s[::-1]
            current_int = mapping[s[i]] # mapping[value]
            next_int = mapping[s[i+1]]

            if current_int >= next_int:
                ans += current_int
            else:
                ans -= current_int

        ans += mapping[s[-1]]

        return ans

func romanToInt(s string) int {
	m := map[string]int{
		"I": 1,
		"V": 5,
		"X": 10,
		"L": 50,
		"C": 100,
		"D": 500,
		"M": 1000,
	}

	sum := m[string(s[len(s)-1])]

	for i := len(s) - 2; i >= 0; i-- {
		currentInt := m[string(s[i])]
		nextInt := m[string(s[i+1])]

		if currentInt < nextInt {
			sum -= currentInt
		} else {
			sum += currentInt
		}
	}

	return sum
}

func romanToInt(s string) int {
	m := map[string]int{
		"I": 1,
		"V": 5,
		"X": 10,
		"L": 50,
		"C": 100,
		"D": 500,
		"M": 1000,
	}

	sum := m[string(s[len(s)-1])]

	for i, v := range s[:len(s)-1] {
		currentInt := m[string(v)]
		nextInt := m[string(s[i+1])]

		if currentInt < nextInt {
			sum -= currentInt
		} else {
			sum += currentInt
		}
	}

	return sum
}

func romanToInt(s string) int {
	m := map[string]int{
		"I": 1,
		"V": 5,
		"X": 10,
		"L": 50,
		"C": 100,
		"D": 500,
		"M": 1000,
	}

	sum := m[string(s[len(s)-1])]

	for i := 0; i < len(s)-1; i++ {
		currentInt := m[string(s[i])]
		nextInt := m[string(s[i+1])]

		if currentInt < nextInt {
			sum -= currentInt
		} else {
			sum += currentInt
		}
	}

	return sum
}