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