计算应缴税款总额· 6 月更文挑战

149 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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的税率为503 的税率为 50% 。需要支付税款 3 * 50% = 1.50。接下来1.50 。 接下来 7 - 3=3 = 4 的税率为 10% 。需要支付税款 4104 * 10% = 0.40 。 最后 1010 - 7 = 3的税率为253 的税率为 25% 。需要支付税款 3 * 25% = 0.75。需要支付的税款总计0.75 。 需要支付的税款总计 1.50 + 0.40+0.40 + 0.75 = $2.65 。 示例 2:

输入:brackets = [[1,0],[4,25],[5,50]], income = 2 输出:0.25000 解释: 前 1的税率为01 的税率为 0% 。需要支付税款 1 * 0% = 0。剩下0 。 剩下 1 的税率为 25% 。需要支付税款 1251 * 25% = 0.25 。 需要支付的税款总计 0+0 + 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;
    }
}
​

四、总结:

image.png 掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐

希望对你有帮助,期待您找到心意的工作和满意的offer

期待下次再见~

🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注Jam,从你我做起!