0
点赞
收藏
分享

微信扫一扫

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


}
}

举报

相关推荐

0 条评论