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