Skip to content

Commit 069933e

Browse files
committedOct 13, 2022
feat: add solutions to lc problem: No.0949
No.0949.Largest Time for Given Digits
1 parent 5d86c0f commit 069933e

File tree

6 files changed

+298
-0
lines changed

6 files changed

+298
-0
lines changed
 

‎solution/0900-0999/0949.Largest Time for Given Digits/README.md

+112
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,134 @@
5757

5858
<!-- 这里可写通用的实现逻辑 -->
5959

60+
**方法一:暴力枚举**
61+
62+
我们可以枚举所有的 4 个数字的排列,然后判断每个排列是否满足题目要求,如果满足则更新答案。
63+
64+
时间复杂度 $O(4^3)$,空间复杂度 $O(1)$。
65+
6066
<!-- tabs:start -->
6167

6268
### **Python3**
6369

6470
<!-- 这里可写当前语言的特殊实现逻辑 -->
6571

6672
```python
73+
class Solution:
74+
def largestTimeFromDigits(self, arr: List[int]) -> str:
75+
cnt = [0] * 10
76+
for v in arr:
77+
cnt[v] += 1
78+
for h in range(23, -1, -1):
79+
for m in range(59, -1, -1):
80+
t = [0] * 10
81+
t[h // 10] += 1
82+
t[h % 10] += 1
83+
t[m // 10] += 1
84+
t[m % 10] += 1
85+
if cnt == t:
86+
return f'{h:02}:{m:02}'
87+
return ''
88+
```
6789

90+
```python
91+
class Solution:
92+
def largestTimeFromDigits(self, arr: List[int]) -> str:
93+
ans = -1
94+
for i in range(4):
95+
for j in range(4):
96+
for k in range(4):
97+
if i != j and i != k and j != k:
98+
h = arr[i] * 10 + arr[j]
99+
m = arr[k] * 10 + arr[6 - i - j - k]
100+
if h < 24 and m < 60:
101+
ans = max(ans, h * 60 + m)
102+
return '' if ans < 0 else f'{ans // 60:02}:{ans % 60:02}'
68103
```
69104

70105
### **Java**
71106

72107
<!-- 这里可写当前语言的特殊实现逻辑 -->
73108

74109
```java
110+
class Solution {
111+
public String largestTimeFromDigits(int[] arr) {
112+
int ans = -1;
113+
for (int i = 0; i < 4; ++i) {
114+
for (int j = 0; j < 4; ++j) {
115+
for (int k = 0; k < 4; ++k) {
116+
if (i != j && j != k && i != k) {
117+
int h = arr[i] * 10 + arr[j];
118+
int m = arr[k] * 10 + arr[6 - i - j - k];
119+
if (h < 24 && m < 60) {
120+
ans = Math.max(ans, h * 60 + m);
121+
}
122+
}
123+
}
124+
}
125+
}
126+
return ans < 0 ? "" : String.format("%02d:%02d", ans / 60, ans % 60);
127+
}
128+
}
129+
```
130+
131+
### **C++**
132+
133+
```cpp
134+
class Solution {
135+
public:
136+
string largestTimeFromDigits(vector<int>& arr) {
137+
int ans = -1;
138+
for (int i = 0; i < 4; ++i) {
139+
for (int j = 0; j < 4; ++j) {
140+
for (int k = 0; k < 4; ++k) {
141+
if (i != j && j != k && i != k) {
142+
int h = arr[i] * 10 + arr[j];
143+
int m = arr[k] * 10 + arr[6 - i - j - k];
144+
if (h < 24 && m < 60) {
145+
ans = max(ans, h * 60 + m);
146+
}
147+
}
148+
}
149+
}
150+
}
151+
if (ans < 0) return "";
152+
int h = ans / 60, m = ans % 60;
153+
return to_string(h / 10) + to_string(h % 10) + ":" + to_string(m / 10) + to_string(m % 10);
154+
}
155+
};
156+
```
75157
158+
### **Go**
159+
160+
```go
161+
func largestTimeFromDigits(arr []int) string {
162+
ans := -1
163+
for i := 0; i < 4; i++ {
164+
for j := 0; j < 4; j++ {
165+
for k := 0; k < 4; k++ {
166+
if i != j && j != k && i != k {
167+
h := arr[i]*10 + arr[j]
168+
m := arr[k]*10 + arr[6-i-j-k]
169+
if h < 24 && m < 60 {
170+
ans = max(ans, h*60+m)
171+
}
172+
}
173+
}
174+
}
175+
}
176+
if ans < 0 {
177+
return ""
178+
}
179+
return fmt.Sprintf("%02d:%02d", ans/60, ans%60)
180+
}
181+
182+
func max(a, b int) int {
183+
if a > b {
184+
return a
185+
}
186+
return b
187+
}
76188
```
77189

78190
### **...**

‎solution/0900-0999/0949.Largest Time for Given Digits/README_EN.md

+106
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,119 @@
4242
### **Python3**
4343

4444
```python
45+
class Solution:
46+
def largestTimeFromDigits(self, arr: List[int]) -> str:
47+
cnt = [0] * 10
48+
for v in arr:
49+
cnt[v] += 1
50+
for h in range(23, -1, -1):
51+
for m in range(59, -1, -1):
52+
t = [0] * 10
53+
t[h // 10] += 1
54+
t[h % 10] += 1
55+
t[m // 10] += 1
56+
t[m % 10] += 1
57+
if cnt == t:
58+
return f'{h:02}:{m:02}'
59+
return ''
60+
```
4561

62+
```python
63+
class Solution:
64+
def largestTimeFromDigits(self, arr: List[int]) -> str:
65+
ans = -1
66+
for i in range(4):
67+
for j in range(4):
68+
for k in range(4):
69+
if i != j and i != k and j != k:
70+
h = arr[i] * 10 + arr[j]
71+
m = arr[k] * 10 + arr[6 - i - j - k]
72+
if h < 24 and m < 60:
73+
ans = max(ans, h * 60 + m)
74+
return '' if ans < 0 else f'{ans // 60:02}:{ans % 60:02}'
4675
```
4776

4877
### **Java**
4978

5079
```java
80+
class Solution {
81+
public String largestTimeFromDigits(int[] arr) {
82+
int ans = -1;
83+
for (int i = 0; i < 4; ++i) {
84+
for (int j = 0; j < 4; ++j) {
85+
for (int k = 0; k < 4; ++k) {
86+
if (i != j && j != k && i != k) {
87+
int h = arr[i] * 10 + arr[j];
88+
int m = arr[k] * 10 + arr[6 - i - j - k];
89+
if (h < 24 && m < 60) {
90+
ans = Math.max(ans, h * 60 + m);
91+
}
92+
}
93+
}
94+
}
95+
}
96+
return ans < 0 ? "" : String.format("%02d:%02d", ans / 60, ans % 60);
97+
}
98+
}
99+
```
100+
101+
### **C++**
102+
103+
```cpp
104+
class Solution {
105+
public:
106+
string largestTimeFromDigits(vector<int>& arr) {
107+
int ans = -1;
108+
for (int i = 0; i < 4; ++i) {
109+
for (int j = 0; j < 4; ++j) {
110+
for (int k = 0; k < 4; ++k) {
111+
if (i != j && j != k && i != k) {
112+
int h = arr[i] * 10 + arr[j];
113+
int m = arr[k] * 10 + arr[6 - i - j - k];
114+
if (h < 24 && m < 60) {
115+
ans = max(ans, h * 60 + m);
116+
}
117+
}
118+
}
119+
}
120+
}
121+
if (ans < 0) return "";
122+
int h = ans / 60, m = ans % 60;
123+
return to_string(h / 10) + to_string(h % 10) + ":" + to_string(m / 10) + to_string(m % 10);
124+
}
125+
};
126+
```
51127
128+
### **Go**
129+
130+
```go
131+
func largestTimeFromDigits(arr []int) string {
132+
ans := -1
133+
for i := 0; i < 4; i++ {
134+
for j := 0; j < 4; j++ {
135+
for k := 0; k < 4; k++ {
136+
if i != j && j != k && i != k {
137+
h := arr[i]*10 + arr[j]
138+
m := arr[k]*10 + arr[6-i-j-k]
139+
if h < 24 && m < 60 {
140+
ans = max(ans, h*60+m)
141+
}
142+
}
143+
}
144+
}
145+
}
146+
if ans < 0 {
147+
return ""
148+
}
149+
return fmt.Sprintf("%02d:%02d", ans/60, ans%60)
150+
}
151+
152+
func max(a, b int) int {
153+
if a > b {
154+
return a
155+
}
156+
return b
157+
}
52158
```
53159

54160
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
string largestTimeFromDigits(vector<int>& arr) {
4+
int ans = -1;
5+
for (int i = 0; i < 4; ++i) {
6+
for (int j = 0; j < 4; ++j) {
7+
for (int k = 0; k < 4; ++k) {
8+
if (i != j && j != k && i != k) {
9+
int h = arr[i] * 10 + arr[j];
10+
int m = arr[k] * 10 + arr[6 - i - j - k];
11+
if (h < 24 && m < 60) {
12+
ans = max(ans, h * 60 + m);
13+
}
14+
}
15+
}
16+
}
17+
}
18+
if (ans < 0) return "";
19+
int h = ans / 60, m = ans % 60;
20+
return to_string(h / 10) + to_string(h % 10) + ":" + to_string(m / 10) + to_string(m % 10);
21+
}
22+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
func largestTimeFromDigits(arr []int) string {
2+
ans := -1
3+
for i := 0; i < 4; i++ {
4+
for j := 0; j < 4; j++ {
5+
for k := 0; k < 4; k++ {
6+
if i != j && j != k && i != k {
7+
h := arr[i]*10 + arr[j]
8+
m := arr[k]*10 + arr[6-i-j-k]
9+
if h < 24 && m < 60 {
10+
ans = max(ans, h*60+m)
11+
}
12+
}
13+
}
14+
}
15+
}
16+
if ans < 0 {
17+
return ""
18+
}
19+
return fmt.Sprintf("%02d:%02d", ans/60, ans%60)
20+
}
21+
22+
func max(a, b int) int {
23+
if a > b {
24+
return a
25+
}
26+
return b
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public String largestTimeFromDigits(int[] arr) {
3+
int ans = -1;
4+
for (int i = 0; i < 4; ++i) {
5+
for (int j = 0; j < 4; ++j) {
6+
for (int k = 0; k < 4; ++k) {
7+
if (i != j && j != k && i != k) {
8+
int h = arr[i] * 10 + arr[j];
9+
int m = arr[k] * 10 + arr[6 - i - j - k];
10+
if (h < 24 && m < 60) {
11+
ans = Math.max(ans, h * 60 + m);
12+
}
13+
}
14+
}
15+
}
16+
}
17+
return ans < 0 ? "" : String.format("%02d:%02d", ans / 60, ans % 60);
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def largestTimeFromDigits(self, arr: List[int]) -> str:
3+
ans = -1
4+
for i in range(4):
5+
for j in range(4):
6+
for k in range(4):
7+
if i != j and i != k and j != k:
8+
h = arr[i] * 10 + arr[j]
9+
m = arr[k] * 10 + arr[6 - i - j - k]
10+
if h < 24 and m < 60:
11+
ans = max(ans, h * 60 + m)
12+
return '' if ans < 0 else f'{ans // 60:02}:{ans % 60:02}'

0 commit comments

Comments
 (0)