1363. 形成三的最大倍数 贪心

1363. 形成三的最大倍数

给你一个整数数组 digits,你可以通过按任意顺序连接其中某些数字来形成 3 的倍数,请你返回所能得到的最大的 3 的倍数。

由于答案可能不在整数数据类型范围内,请以字符串形式返回答案。

如果无法得到答案,请返回一个空字符串。

示例 1:

输入:digits = [8,1,9]
输出:"981"

示例 2:

输入:digits = [8,6,7,1,0]
输出:"8760"

示例 3:

输入:digits = [1]
输出:""

示例 4:

输入:digits = [0,0,0,0,0,0]
输出:"0"

提示:

  • 1 <= digits.length <= 10^4
  • 0 <= digits[i] <= 9
  • 返回的结果不应包含不必要的前导零。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-permutations-for-di-sequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

做题结果

失败,每日一题做出了,花了几个小时,其他两题一点思路都没有

方法:贪心

1. 如果和余数为1,那么可以考虑到,数组和余数为1要么有1个数余数为1,要么有2个取余数的结果为2,2+2=4 , 4%3=1

2. 如果和余数为2,那么可以考虑到,数组和余数为2要么有1个数余数为2,要么有两个数余数为1

3. 如果和余数为0,那么数组排序后翻转即可

class Solution {
    public String largestMultipleOfThree(int[] digits) {
        int sum = 0;
        int n = digits.length;
        int[] mods = new int[3];
        for(int i = n-1; i >= 0; i--){
            sum+=digits[i];
            mods[digits[i]%3]++;
        }

        if(sum%3!=0){
            int v = sum%3;
            if(mods[v]>0)--mods[v];
            else mods[3-v]-=2;
        }

        StringBuilder sb = new StringBuilder();
        Arrays.sort(digits);
        for(int i = n-1; i >= 0; i--){
            if(mods[digits[i]%3]>0){
                --mods[digits[i]%3]; 
                sb.append(digits[i]);
                if(sb.length()==1 && digits[i]==0) break;
            }
        }
               
        return sb.toString();


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值