5172-形成三的最大倍数

5172-形成三的最大倍数

给你一个整数数组 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.com/problems/largest-multiple-of-three
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    public String largestMultipleOfThree(int[] digits) {
        // 3的倍数的数的各位之和也是3的倍数
        // 因为是数字,所以用0~9表示
        int[] nums = new int[10];
        int sum = 0;
        for(int num : digits) {
            nums[num]++;
            sum += num;
        }

        if(sum == 0) {
            return "0";
        }

        sum %= 3;

        if(sum == 1) {
            // 1 4 7
            if(!delete(nums, 1)) {
                delete(nums, 2);
                delete(nums, 2);
            }
        } else if(sum == 2){
            // 2 5 8
            if(!delete(nums, 2)) {
                delete(nums, 1);
                delete(nums, 1);
            }
        }

        StringBuilder sb = new StringBuilder();
        for(int i = 9; i >= 0; i--) {
            int t = nums[i];
            while (t > 0) {
                sb.append(i);
                t--;
            }
        }

        return sb.toString();
    }

    private boolean delete(int[] nums, int i) {
        for (int k = i; k < 9; k += 3) {
            if(nums[k] != 0) {
                nums[k]--;
                return true;
            }
        }
        return false;
    }

猜你喜欢

转载自www.cnblogs.com/angelica-duhurica/p/12353163.html