LeetCode 2591. 将钱分给最多的儿童

LeetCode 2591. 将钱分给最多的儿童

描述

给你一个整数 money ,表示你总共有的钱数(单位为美元)和另一个整数 children ,表示你要将钱分配给多少个儿童。

你需要按照如下规则分配:

所有的钱都必须被分配。
每个儿童至少获得 1 美元。
没有人获得 4 美元。

请你按照上述规则分配金钱,并返回 最多 有多少个儿童获得 恰好 8 美元。如果没有任何分配方案,返回 -1 。

示例 1:

输入:money = 20, children = 3
输出:1

解释:
最多获得 8 美元的儿童数为 1 。一种分配方案为:

  • 给第一个儿童分配 8 美元。
  • 给第二个儿童分配 9 美元。
  • 给第三个儿童分配 3 美元。
    没有分配方案能让获得 8 美元的儿童数超过 1 。

示例 2:

输入:money = 16, children = 2
输出:2

解释:每个儿童都可以获得 8 美元。

提示:

1 <= money <= 200
2 <= children <= 30

题解

class Solution {
    public int distMoney(int money, int children) {
        // 每一个分一美元
        money = money - children;
        // 不够分 返回-1
        if(money<0){
            return -1;
        }
        // 剩余不足7 返回0
        if(money<7){
            return 0;
        }
        // 7的个数
        int n = money/7;
        // 7的个数比孩子数多
        if(n>children){
            // 必须分完 即必定有一个孩子超过8美元
            return children-1;
        }
        // 7的个数与孩子数目相同
        if(n==children){
            // 没有剩余的钱
            if(money%7==0){
                // 返回 7 的数目
                return n;
            }
            // 有剩余
            else {
                // 则必定有一个孩子不是8美元
                return children - 1;
            }
        }
        // 7的个数比孩子数少1
        if(n== children-1){
            // 剩余3 不能为4美元
            // 返回 孩子数-2
            if(money%7==3){
                return children - 2;
            }else {
                // 没有4美元请情况
                // 返回 7 的个数
                return children - 1;
            }
        }else {
            // 返回 7 的个数
            return n;
        }
    }
}

你可能感兴趣的:(leetcode,算法,java,数学)