持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
一、题目描述:
给你一个下标从 0 开始的二维整数数组 brackets ,其中 brackets[i] = [upperi, percenti] ,表示第 i 个税级的上限是 upperi ,征收的税率为 percenti 。税级按上限 从低到高排序(在满足 0 < i < brackets.length 的前提下,upperi-1 < upperi)。
税款计算方式如下:
不超过 upper0 的收入按税率 percent0 缴纳 接着 upper1 - upper0 的部分按税率 percent1 缴纳 然后 upper2 - upper1 的部分按税率 percent2 缴纳 以此类推 给你一个整数 income 表示你的总收入。返回你需要缴纳的税款总额。与标准答案误差不超 10-5 的结果将被视作正确答案。
示例 1:
输入:brackets = [[3,50],[7,10],[12,25]], income = 10 输出:2.65000 解释: 前 3 * 50% = 7 - 4 的税率为 10% 。需要支付税款 0.40 。 最后 7 = 3 * 25% = 1.50 + 0.75 = $2.65 。 示例 2:
输入:brackets = [[1,0],[4,25],[5,50]], income = 2 输出:0.25000 解释: 前 1 * 0% = 1 的税率为 25% 。需要支付税款 0.25 。 需要支付的税款总计 0.25 = $0.25 。 示例 3:
输入:brackets = [[2,50]], income = 0 输出:0.00000 解释: 没有收入,无需纳税,需要支付的税款总计 $0 。
提示:
1 <= brackets.length <= 100 1 <= upperi <= 1000 0 <= percenti <= 100 0 <= income <= 1000 upperi 按递增顺序排列 upperi 中的所有值 互不相同 最后一个税级的上限大于等于 income
来源:力扣(LeetCode) 链接:leetcode.cn/problems/ca… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
prev为已交税部分,res为结果。 prev初始值设为0,即初始情况下没有交税。当income>upper[i]时,需要交税的部分为upper[i]-prev,否则为income-prev,税率为percent[i]。在每次计算后将prev更新为upper[i],如果income<=upper[i]则说明全部收入都已交税,直接返回res即可。
三、AC 代码:
class Solution
{
public double calculateTax(int[][] brackets, int income)
{
int n = brackets.length;
double res = 0.0;
for (int i = 0; i < n; i ++)
{
int x = brackets[i][0], per = brackets[i][1];
if (income < x)
{
int d = income - (0 <= i - 1 ? brackets[i - 1][0] : 0);
double cur = (double)d * (double)per / 100;
res += cur;
break;
}
else
{
int d = x - (0 <= i - 1 ? brackets[i - 1][0] : 0);
double cur = (double)d * (double)per / 100;
res += cur;
}
}
return res;
}
}
四、总结:
掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐
希望对你有帮助,期待您找到心意的工作和满意的offer
期待下次再见~
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注Jam,从你我做起!