Skip to content

Commit 8c8ed3e

Browse files
committedFeb 29, 2020
add 1363
1 parent 2fdfbb8 commit 8c8ed3e

File tree

7 files changed

+170
-5
lines changed

7 files changed

+170
-5
lines changed
 

‎README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -654,4 +654,5 @@ LeetCode
654654
|1359|[Count All Valid Pickup and Delivery Options](https://leetcode.com/problems/count-all-valid-pickup-and-delivery-options/)|c|[c++](./src/1359-Count-All-Valid-Pickup-and-Delivery-Options/1359.cpp)|[python](./src/1359-Count-All-Valid-Pickup-and-Delivery-Options/1359.py)|[go](./src/1359-Count-All-Valid-Pickup-and-Delivery-Options/1359.go)|[js](./src/1359-Count-All-Valid-Pickup-and-Delivery-Options/1359.js)|[java](./src/1359-Count-All-Valid-Pickup-and-Delivery-Options/1359.java)|Hard|
655655
|1360|[Number of Days Between Two Dates](https://leetcode.com/problems/number-of-days-between-two-dates/)|c|[c++](./src/1360-Number-of-Days-Between-Two-Dates/1360.cpp)|[python](./src/1360-Number-of-Days-Between-Two-Dates/1360.py)|[go](./src/1360-Number-of-Days-Between-Two-Dates/1360.go)|[js](./src/1360-Number-of-Days-Between-Two-Dates/1360.js)|[java](./src/1360-Number-of-Days-Between-Two-Dates/1360.java)|Easy|
656656
|1361|[Validate Binary Tree Nodes](https://leetcode.com/problems/validate-binary-tree-nodes/)|c|[c++](./src/1361-Validate-Binary-Tree-Nodes/1361.cpp)|[python](./src/1361-Validate-Binary-Tree-Nodes/1361.py)|[go](./src/1361-Validate-Binary-Tree-Nodes/1361.go)|[js](./src/1361-Validate-Binary-Tree-Nodes/1361.js)|[java](./src/1361-Validate-Binary-Tree-Nodes/1361.java)|Medium|
657-
|1362|[Closest Divisors](https://leetcode.com/problems/closest-divisors/)|c|[c++](./src/1362-Closest-Divisors/1362.cpp)|[python](./src/1362-Closest-Divisors/1362.py)|[go](./src/1362-Closest-Divisors/1362.go)|[js](./src/1362-Closest-Divisors/1362.js)|[java](./src/1362-Closest-Divisors/1362.java)|Medium|
657+
|1362|[Closest Divisors](https://leetcode.com/problems/closest-divisors/)|c|[c++](./src/1362-Closest-Divisors/1362.cpp)|[python](./src/1362-Closest-Divisors/1362.py)|[go](./src/1362-Closest-Divisors/1362.go)|[js](./src/1362-Closest-Divisors/1362.js)|[java](./src/1362-Closest-Divisors/1362.java)|Medium|
658+
|1363|[Largest Multiple of Three](https://leetcode.com/problems/largest-multiple-of-three/)|c|[c++](./src/1363-Largest-Multiple-of-Three/1363.cpp)|[python](./src/1363-Largest-Multiple-of-Three/1363.py)|[go](./src/1363-Largest-Multiple-of-Three/1363.go)|[js](./src/1363-Largest-Multiple-of-Three/1363.js)|[java](./src/1363-Largest-Multiple-of-Three/1363.java)|Hard|
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class Solution
2+
{
3+
public:
4+
string largestMultipleOfThree(vector<int>& digits)
5+
{
6+
int cnt[10] = {};
7+
for (int i : digits) cnt[i]++;
8+
int b1 = cnt[1] + cnt[4] + cnt[7], b2 = cnt[2] + cnt[5] + cnt[8];
9+
int t = (b1 + 2 * b2) % 3;
10+
11+
if (t == 1)
12+
{
13+
if (b1 >= 1) b1--;
14+
else b2 -= 2;
15+
}
16+
else if (t == 2)
17+
{
18+
if (b2 >= 1) b2--;
19+
else b1 -= 2;
20+
}
21+
22+
stringstream in;
23+
for (int d = 9; d >= 0; d--)
24+
{
25+
if (d % 3 == 0) while (cnt[d]-- > 0) in << d;
26+
else if (d % 3 == 1) while (cnt[d]-- > 0 && b1-- > 0) in << d;
27+
else while (cnt[d]-- > 0 && b2-- > 0) in << d;
28+
}
29+
30+
string res; in >> res;
31+
if (res.size() && res[0] == '0') return "0";
32+
return res;
33+
}
34+
};
+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
func largestMultipleOfThree(digits []int) string {
2+
cnt := make([]int, 10)
3+
for _, i := range digits {
4+
cnt[i]++
5+
}
6+
b1, b2 := cnt[1] + cnt[4] + cnt[7], cnt[2] + cnt[5] + cnt[8]
7+
t := (b1 + 2 * b2) % 3
8+
9+
if t == 1 {
10+
if b1 >= 1 {
11+
b1--
12+
} else {
13+
b2 -= 2
14+
}
15+
} else if t == 2 {
16+
if b2 >= 1 {
17+
b2--
18+
} else {
19+
b1 -= 2
20+
}
21+
}
22+
23+
res := []byte{}
24+
for i := 9; i >= 0; i-- {
25+
if i % 3 == 0 {
26+
for cnt[i] > 0 {
27+
res = append(res, byte(i) + 48)
28+
cnt[i]--
29+
}
30+
} else if i % 3 == 1 {
31+
for cnt[i] > 0 && b1 > 0 {
32+
res = append(res, byte(i) + 48)
33+
cnt[i]--
34+
b1--
35+
}
36+
} else {
37+
for cnt[i] > 0 && b2 > 0 {
38+
res = append(res, byte(i) + 48)
39+
cnt[i]--
40+
b2--
41+
}
42+
}
43+
}
44+
45+
if len(res) > 0 && res[0] == '0' {
46+
return "0"
47+
}
48+
return string(res)
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public String largestMultipleOfThree(int[] digits) {
3+
int[] cnt = new int[10];
4+
for (int d : digits) cnt[d]++;
5+
int b1 = cnt[1] + cnt[4] + cnt[7];
6+
int b2 = cnt[2] + cnt[5] + cnt[8];
7+
int t = (b1 + 2 * b2) % 3;
8+
if (t == 1) {
9+
if (b1 >= 1) b1 -= 1;
10+
else b2 -= 2;
11+
} else if (t == 2) {
12+
if (b2 >= 1) b2 -= 1;
13+
else b1 -= 2;
14+
}
15+
16+
StringBuilder res = new StringBuilder();
17+
for (int d = 9; d >= 0; d--) {
18+
if (d % 3 == 0) while (cnt[d]-- > 0) res.append(d);
19+
else if (d % 3 == 1) while (cnt[d]-- > 0 && b1-- > 0) res.append(d);
20+
else while (cnt[d]-- > 0 && b2-- > 0) res.append(d);
21+
}
22+
if (res.length() > 0 && res.charAt(0) == '0') return "0";
23+
return res.toString();
24+
}
25+
}
+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
var largestMultipleOfThree = function(digits) {
2+
let cnt = Array(10).fill(0);
3+
for (let d of digits) cnt[d]++;
4+
let b1 = cnt[1] + cnt[4] + cnt[7], b2 = cnt[2] + cnt[5] + cnt[8];
5+
let t = (b1 + 2 * b2) % 3;
6+
if (t == 1) {
7+
if (b1 >= 1) b1 -= 1;
8+
else b2 -= 2;
9+
} else if (t == 2) {
10+
if (b2 >= 1) b2 -= 1;
11+
else b1 -= 2;
12+
}
13+
14+
let res = "";
15+
for (let d = 9; d >= 0; d--) {
16+
if (d % 3 == 0) while (cnt[d]-- > 0) res += d;
17+
else if (d % 3 == 1) while (cnt[d]-- > 0 && b1-- > 0) res += d;
18+
else while (cnt[d]-- > 0 && b2-- > 0) res += d;
19+
}
20+
if (res.length && res.charAt(0) == '0') return "0";
21+
return res;
22+
};
+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class Solution:
2+
def largestMultipleOfThree(self, digits: List[int]) -> str:
3+
cnt = [0] * 10
4+
for i in digits: cnt[i] += 1
5+
6+
b1, b2 = cnt[1] + cnt[4] + cnt[7], cnt[2] + cnt[5] + cnt[8]
7+
t = (b1 + b2 * 2) % 3
8+
9+
if t == 1:
10+
if b1 >= 1: b1 -= 1
11+
else: b2 -= 2
12+
elif t == 2:
13+
if b2 >= 1: b2 -= 1
14+
else: b1 -= 2
15+
16+
res = ""
17+
for i in range(9, -1, -1):
18+
if i % 3 == 0:
19+
while cnt[i]:
20+
res += str(i)
21+
cnt[i] -= 1
22+
elif i % 3 == 1 and b1:
23+
while cnt[i] and b1:
24+
res += str(i)
25+
cnt[i] -= 1
26+
b1 -= 1
27+
else:
28+
while cnt[i] and b2:
29+
res += str(i)
30+
cnt[i] -= 1
31+
b2 -= 1
32+
33+
if res and res[0] == "0": return "0"
34+
return res

‎src/addProb.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
import os, bisect
33

44
# 题目名称
5-
name = "Closest Divisors"
6-
ID = 1362
7-
url = "https://leetcode.com/problems/closest-divisors/"
8-
difficult = "Medium"
5+
name = "Largest Multiple of Three"
6+
ID = 1363
7+
url = "https://leetcode.com/problems/largest-multiple-of-three/"
8+
difficult = "Hard"
99
prog = ['c', 'cpp', 'py', 'go', 'js', 'java']
1010

1111

0 commit comments

Comments
 (0)