5172- form the largest multiple of three

5172- form the largest multiple of three

Give you an array of integers digits, you can be formed by connecting a multiple of 3 wherein some digital any order, you can get maximum return to a multiple of three.

Since the answer may not be an integer in the range of data type, return answer string.

If you can not get an answer, please return an empty string.

Example 1:

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

Example 2:

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

Example 3:

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

Example 4:

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

prompt:

  • 1 <= digits.length <= 10^4
  • 0 <= digits[i] <= 9
  • The results returned should not contain unnecessary leading zeros.

Source: stay button (LeetCode)
link: https://leetcode-cn.com/problems/largest-multiple-of-three
copyrighted by deduction from all networks. Commercial reprint please contact the authorized official, non-commercial reprint please indicate the source.

    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;
    }

Guess you like

Origin www.cnblogs.com/angelica-duhurica/p/12353163.html