classSolution { public: stringlargestMultipleOfThree(vector<int>& digits){ vector<vector<int>> v(3); int sum = 0; for (auto x : digits) { v[x%3].push_back(x); sum += x; sum %= 3; } vector<int> r; for (int i = 0; i < 3; ++ i) { sort(v[i].begin(), v[i].end(), greater<int>()); } if (sum == 0) { for (int i = 0; i < 3; ++ i) { int c = v[i].size(); for (int j = 0; j < c; ++ j) r.push_back(v[i][j]); } } elseif (sum == 1) { if (v[1].size() >= 1) { for (int i = 0; i < 3; ++ i) { int c = v[i].size(); if (i == 1) c --; for (int j = 0; j < c; ++ j) r.push_back(v[i][j]); } } else { for (int i = 0; i < 3; ++ i) { int c = v[i].size(); if (i == 2) c -= 2; for (int j = 0; j < c; ++ j) r.push_back(v[i][j]); } } } elseif (sum == 2) { if (v[2].size() >= 1) { for (int i = 0; i < 3; ++ i) { int c = v[i].size(); if (i == 2) c --; for (int j = 0; j < c; ++ j) r.push_back(v[i][j]); } } else { for (int i = 0; i < 3; ++ i) { int c = v[i].size(); if (i == 1) c -= 2; for (int j = 0; j < c; ++ j) r.push_back(v[i][j]); } } } if (r.empty()) return""; sort(r.begin(), r.end(), greater<int>()); if (r[0] == 0) return"0"; string ret; for (auto x : r) ret += x+'0'; return ret; } };