Largest Multiple of Three LeetCode solution in Java
1class Solution {2public String largestMultipleOfThree(int[] digits) {3int n = digits.length;4Arrays.sort(digits);56if (digits[digits.length - 1] == 0) {7return "0";8}910int sum = 0;1112for (int i = 0; i < digits.length; i++) {13sum += digits[i];14}1516if (sum % 3 == 0) {17StringBuilder sb = new StringBuilder("");1819for (int i = n - 1; i >= 0; i--) {20sb.append(digits[i]);21}2223return sb.toString();24} else if (sum % 3 == 1) {25int modOne = -1;2627for (int i = 0; i < n; i++) {28if (digits[i] % 3 == 1) {29modOne = i;30break;31}32}3334if (modOne == -1) {35int[] idx = new int[2];36Arrays.fill(idx, -1);3738for (int i = 0; i < n; i++) {39if (digits[i] % 3 == 2) {40if (idx[0] == -1) {41idx[0] = i;42} else {43idx[1] = i;44break;45}46}47}4849if (idx[1] == -1) {50return "";51} else {52digits[idx[0]] = -1;53digits[idx[1]] = -1;54}55} else {56digits[modOne] = -1;57}58} else {59int modTwo = -1;6061for (int i = 0; i < n; i++) {62if (digits[i] % 3 == 2) {63modTwo = i;64break;65}66}6768if (modTwo == -1) {69int[] idx = new int[2];70Arrays.fill(idx, -1);7172for (int i = 0; i < n; i++) {73if (digits[i] % 3 == 1) {74if (idx[0] == -1) {75idx[0] = i;76} else {77idx[1] = i;78break;79}80}81}8283if (idx[1] == -1) {84return "";85} else {86digits[idx[0]] = -1;87digits[idx[1]] = -1;88}89} else {90digits[modTwo] = -1;91}92}9394StringBuilder sb = new StringBuilder("");9596for (int i = n - 1; i >= 0; i--) {97if (digits[i] != -1) {98sb.append(digits[i]);99}100}101102if (sb.length() > 0 && sb.toString().charAt(0) == '0') {103return "0";104}105return sb.toString();106}107}