Study Plan For Algorithms - Part6

WindMay發表於2024-08-20

1. 盛最多水的容器
題目連結:https://leetcode.cn/problems/container-with-most-water/
給定一個長度為 n 的整數陣列 height 。有 n 條垂線,第 i 條線的兩個端點是 (i, 0) 和 (i, height[i]) 。
找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。
返回容器可以儲存的最大水量。

class Solution:
    def maxArea(self, height: List[int]) -> int:
        left, right = 0, len(height) - 1
        max_area = 0

        while left < right:
            h = min(height[left], height[right])
            w = right - left
            area = h * w

            max_area = max(max_area, area)

            if height[left] < height[right]:
                left += 1
            else:
                right -= 1

        return max_area

2. 整數轉羅馬數字
題目連結:https://leetcode.cn/problems/integer-to-roman/
七個不同的符號代表羅馬數字,其值如下:

符號
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

羅馬數字是透過新增從最高到最低的小數位值的轉換而形成的。將小數位值轉換為羅馬數字有以下規則:
如果該值不是以 4 或 9 開頭,請選擇可以從輸入中減去的最大值的符號,將該符號附加到結果,減去其值,然後將其餘部分轉換為羅馬數字。
如果該值以 4 或 9 開頭,使用 減法形式,表示從以下符號中減去一個符號,例如 4 是 5 (V) 減 1 (I): IV ,9 是 10 (X) 減 1 (I):IX。僅使用以下減法形式:4 (IV),9 (IX),40 (XL),90 (XC),400 (CD) 和 900 (CM)。
只有 10 的次方(I, X, C, M)最多可以連續附加 3 次以代表 10 的倍數。你不能多次附加 5 (V),50 (L) 或 500 (D)。如果需要將符號附加4次,請使用 減法形式。
給定一個整數,將其轉換為羅馬數字。

class Solution:
    def intToRoman(self, num: int) -> str:
        values = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
        numerals = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]
        roman_numeral = ''
        i = 0
        while num > 0:
            for _ in range(num // values[i]):
                roman_numeral += numerals[i]
                num -= values[i]
            i += 1
        return roman_numeral

相關文章