-
Notifications
You must be signed in to change notification settings - Fork 93
/
Copy pathLargest Multiple of Three.cpp
78 lines (77 loc) · 2.05 KB
/
Largest Multiple of Three.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
class Solution {
public:
string largestMultipleOfThree(vector<int>& digits) {
int sum = 0;
vector<int> freq(10, 0);
for(int i=0; i<digits.size(); i++){
sum+=digits[i];
freq[digits[i]]++;
}
string ans = "";
bool flag = 1;
if(sum%3==1){
if(freq[1]>0){
freq[1]--;
} else if(freq[4]>0){
freq[4]--;
} else if(freq[7]>0){
freq[7]--;
} else if(freq[2]>1){
freq[2]-=2;
} else if(freq[5]>0 && freq[2]>0){
freq[5]--;
freq[2]--;
} else if(freq[8]>0 && freq[2]>0){
freq[8]--;
freq[2]--;
} else if(freq[5]>1){
freq[5]-=2;
} else if(freq[8]>0 && freq[5]>0){
freq[8]--;
freq[5]--;
} else if(freq[8]>1){
freq[8]-=2;
} else{
flag=0;
}
} else if(sum%3==2){
if(freq[2]>0){
freq[2]--;
} else if(freq[5]>0){
freq[5]--;
} else if(freq[8]>0){
freq[8]--;
} else if(freq[1]>1){
freq[1]-=2;
} else if(freq[4]>0 && freq[1]>0){
freq[4]--;
freq[1]--;
} else if(freq[7]>0 && freq[1]>0){
freq[7]--;
freq[1]--;
} else if(freq[7]>0 && freq[4]>0){
freq[7]--;
freq[4]--;
} else if(freq[7]>1){
freq[7]-=2;
} else{
flag = 0;
}
}
if(flag==0){
return ans;
}
for(int i=9; i>=0; i--){
if(freq[i]==0){
continue;
}
if(i==0 && ans==""){
ans="0";
break;
}
string s(freq[i], to_string(i)[0]);
ans+=s;
}
return ans;
}
};