leetcode
leetcode 1201 ~ 1250
计算应缴税款总额

计算应缴税款总额

难度:

标签:

题目描述

代码结果

运行时间: 25 ms, 内存: 16.1 MB


解释

方法:

此题解采用了逐级累计的方法来计算税款。对于每一个税级,计算当前税级的应税收入(即当前税级的上限与前一税级的上限之差,且不超过总收入),然后乘以该税级的税率,得到该税级的税款。累加各税级的税款得到总税款。当总收入小于或等于当前税级的上限时,意味着后续税级无需计算,可以提前终止循环。

时间复杂度:

O(n)

空间复杂度:

O(1)

代码细节讲解

🦆
在题解中,你是如何决定何时结束循环的?具体是基于哪些条件?
在题解中,循环的结束条件是当收入值`income`小于或等于当前税级的上限`upper`时。这是因为税级是逐级递增的,一旦收入在某个税级范围内,更高的税级就不会再对收入产生影响。因此,一旦达到这个条件,程序就可以提前终止循环,因为后续的税级不会再对总税款有贡献。
🦆
题解中使用了`min(income, upper) - lower`这个公式来计算应税收入的部分。为什么要使用`min`函数,直接使用`income`会有什么潜在的问题吗?
使用`min(income, upper) - lower`是为了确保计算的收入部分不会超过当前税级的上限。如果直接使用`income`而不是`min(income, upper)`,当收入超过当前税级的上限时,会导致计算出的应税收入超出实际应税的范围,从而计算出错误的税款。例如,如果收入为40000,而当前税级的上限是30000,直接使用income将计算出高于30000的税,这是不正确的。`min`函数确保不会超过税级上限,从而保证税款计算的正确性。
🦆
为什么在计算完一个税级的税款后需要更新`lower`为当前税级的`upper`?这样做的目的是什么?
在计算完一个税级后更新`lower`为当前税级的`upper`是为了为计算下一个税级的应税收入做准备。`lower`代表的是上一个处理过的税级的上限,它被用作计算下一个税级应税收入的下界。这种更新确保了每个税级只计算超过前一个税级上限的收入部分,防止对同一部分收入重复计算税款。
🦆
在题解中,所有税款最后除以100的操作是基于什么考虑?这里的100代表什么意义?
在题解中,所有税款最后除以100的操作是为了将税率的百分比形式转化为小数形式。税率在题解中是以百分比的形式给出的(例如10表示10%),因此计算税款时首先以百分比形式计算,最后通过除以100将这个百分比转换为相应的小数(即10%变为0.10)。这样做是为了正确计算出以货币单位表示的税款金额。

相关问题