python做题日记(4)

第十一题

        第十一题描述的是给定一个数组,数组中的每一组数表示高度,用数组中的两个数当作容器的左右两边,它们与底构成了一个容器,所要做的就是计算出如何选择数组中的数组成具有最大容积的容器,底长度为数组中两数的下标之差。要得到最大容器,需要较大的底边,又因为作为高的两边长度不相等,而作为盛水的容器应该以最小的高来计算,因此可以从数组两边向内来计算获得最大容器。

class Solution:
    def maxArea(self, height: list[int]) -> int:
        left, right = 0, len(height) - 1
        max_area = 0
        while left < right:
            # 计算当前面积
            area = min(height[left], height[right]) * (right - left)
            max_area = max(max_area, area)
            # 移动较短的那根线段
            if height[left] < height[right]:
                left += 1
            else:
                right -= 1
        return max_area

第十二题

        第十二题说的是将十进制数字转化为罗马数字,罗马数字比较特别的就是4,9这种数字的表示方式,可以将这一类比较特别的表示方式列出来,然后通过遍历的方法将十进制数字转化为罗马数字。

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

你可能感兴趣的:(python刷题,python,开发语言)