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