返回

用Python解决LeetCode 2303. 计算缴纳的税款问题

后端

问题

LeetCode 2303. 计算缴纳的税款

给你一个整数数组 brackets ,其中 brackets[i] = [start_i, end_i, percent_i] 表示第 i 个税级范围为 [start_i, end_i] ,百分比为 percent_i。也就是说,如果一个人的收入在范围 [start_i, end_i] 内,那么他需要缴纳的税款为 percent_i * (收入 - start_i)。

请你返回需要缴纳的税款总额。

示例 1:

输入:brackets = [[1, 2, 10], [3, 5, 15], [6, 10, 20], [11, 20, 25]]
输出:230
解释:
第一级税级范围是 [1, 2],百分比是 10%。这意味着如果一个人的收入在 12 美元之间,那么他需要缴纳的税款为 10% * (收入 - 1) 美元。
第二级税级范围是 [3, 5],百分比是 15%。这意味着如果一个人的收入在 35 美元之间,那么他需要缴纳的税款为 15% * (收入 - 3) 美元。
第三级税级范围是 [6, 10],百分比是 20%。这意味着如果一个人的收入在 610 美元之间,那么他需要缴纳的税款为 20% * (收入 - 6) 美元。
第四级税级范围是 [11, 20],百分比是 25%。这意味着如果一个人的收入在 1120 美元之间,那么他需要缴纳的税款为 25% * (收入 - 11) 美元。
这个人收入为 10 美元。第一级税级是 [1, 2],所以他不缴纳任何税款。第二级税级是 [3, 5],所以他需要缴纳的税款为 15% * (10 - 3) = 1.05 美元。第三级税级是 [6, 10],所以他需要缴纳的税款为 20% * (10 - 6) = 0.80 美元。第四级税级是 [11, 20],所以他不缴纳任何税款。总的税款是 1.05 + 0.80 = 1.85 美元。

示例 2:

输入:brackets = [[0, 100, 10]]
输出:0
解释:
只有一个税级范围是 [0, 100],百分比是 10%。这意味着如果一个人的收入在 0100 美元之间,那么他需要缴纳的税款为 10% * (收入 - 0) 美元。
这个人收入为 10 美元。所以他需要缴纳的税款为 10% * (10 - 0) = 1 美元。

提示:

  • 1 <= brackets.length <= 100
  • brackets[i].length == 3
  • 1 <= start_i <= end_i <= 1000
  • 0 <= percent_i <= 100

解题思路

本题考察的是计税规则的计算。解题思路比较简单,我们可以按照税级范围和百分比对收入进行分段计算,然后将各个分段的税款相加,最后得到总的税款。

具体步骤如下:

  1. 初始化一个变量 total_tax 来存储总的税款。
  2. 按照税级范围对收入进行排序。
  3. 遍历排序后的税级范围:
    • 如果收入在当前税级范围内,那么计算该分段的税款,并将其添加到 total_tax 中。
    • 如果收入超出当前税级范围,那么继续遍历下一个税级范围。
  4. 返回 total_tax。

代码实现

def calculateTax(brackets, income):
    """
    :type brackets: List[List[int]]
    :type income: int
    :rtype: float
    """
    # 初始化总税款为 0
    total_tax = 0.0

    # 按照税级范围对收入进行排序
    brackets.sort(key=lambda x: x[0])

    # 遍历排序后的税级范围
    for bracket in brackets:
        # 如果收入在当前税级范围内,则计算该分段的税款
        if income >= bracket[0] and income <= bracket[1]:
            tax = (income - bracket[0]) * bracket[2] / 100.0
            total_tax += tax
            break
        # 如果收入超出当前税级范围,则继续遍历下一个税级范围
        elif income > bracket[1]:
            tax = (bracket[1] - bracket[0]) * bracket[2] / 100.0
            total_tax += tax

    # 返回总税款
    return total_tax

代码复杂度分析

  • 时间复杂度:O(n log n),其中 n 是税级范围的数量。对税级范围进行排序的时间复杂度是 O(n log n),遍历排序后的税级范围的时间复杂度是 O(n)。
  • 空间复杂度:O(1),不需要额外空间。