返回
用Python解决LeetCode 2303. 计算缴纳的税款问题
后端
2024-01-18 23:09:26
问题
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%。这意味着如果一个人的收入在 1 到 2 美元之间,那么他需要缴纳的税款为 10% * (收入 - 1) 美元。
第二级税级范围是 [3, 5],百分比是 15%。这意味着如果一个人的收入在 3 到 5 美元之间,那么他需要缴纳的税款为 15% * (收入 - 3) 美元。
第三级税级范围是 [6, 10],百分比是 20%。这意味着如果一个人的收入在 6 到 10 美元之间,那么他需要缴纳的税款为 20% * (收入 - 6) 美元。
第四级税级范围是 [11, 20],百分比是 25%。这意味着如果一个人的收入在 11 到 20 美元之间,那么他需要缴纳的税款为 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%。这意味着如果一个人的收入在 0 到 100 美元之间,那么他需要缴纳的税款为 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
解题思路
本题考察的是计税规则的计算。解题思路比较简单,我们可以按照税级范围和百分比对收入进行分段计算,然后将各个分段的税款相加,最后得到总的税款。
具体步骤如下:
- 初始化一个变量 total_tax 来存储总的税款。
- 按照税级范围对收入进行排序。
- 遍历排序后的税级范围:
- 如果收入在当前税级范围内,那么计算该分段的税款,并将其添加到 total_tax 中。
- 如果收入超出当前税级范围,那么继续遍历下一个税级范围。
- 返回 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),不需要额外空间。