Skip to content

Commit 7efca83

Browse files
committed
feat: add solutions to lc problem: No.2162
No.2162.Minimum Cost to Set Cooking Time
1 parent 4a1a33b commit 7efca83

File tree

6 files changed

+312
-2
lines changed

6 files changed

+312
-2
lines changed

solution/2100-2199/2162.Minimum Cost to Set Cooking Time/README.md

Lines changed: 107 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,121 @@
8282
<!-- 这里可写当前语言的特殊实现逻辑 -->
8383

8484
```python
85-
85+
class Solution:
86+
def minCostSetTime(self, startAt: int, moveCost: int, pushCost: int, targetSeconds: int) -> int:
87+
def f(m, s):
88+
if not 0 <= m < 100 or not 0 <= s < 100:
89+
return inf
90+
arr = [m // 10, m % 10, s // 10, s % 10]
91+
i = 0
92+
while i < 4 and arr[i] == 0:
93+
i += 1
94+
t = 0
95+
prev = startAt
96+
for v in arr[i:]:
97+
if v != prev:
98+
t += moveCost
99+
t += pushCost
100+
prev = v
101+
return t
102+
103+
m, s = divmod(targetSeconds, 60)
104+
ans = min(f(m, s), f(m - 1, s + 60))
105+
return ans
86106
```
87107

88108
### **Java**
89109

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

92112
```java
113+
class Solution {
114+
public int minCostSetTime(int startAt, int moveCost, int pushCost, int targetSeconds) {
115+
int m = targetSeconds / 60;
116+
int s = targetSeconds % 60;
117+
return Math.min(f(m, s, startAt, moveCost, pushCost), f(m - 1, s + 60, startAt, moveCost, pushCost));
118+
}
119+
120+
private int f(int m, int s, int prev, int moveCost, int pushCost) {
121+
if (m < 0 || m > 99 || s < 0 || s > 99) {
122+
return Integer.MAX_VALUE;
123+
}
124+
int[] arr = new int[]{m / 10, m % 10, s / 10, s % 10};
125+
int i = 0;
126+
for (; i < 4 && arr[i] == 0; ++i);
127+
int t = 0;
128+
for (; i < 4; ++i) {
129+
if (arr[i] != prev) {
130+
t += moveCost;
131+
}
132+
t += pushCost;
133+
prev = arr[i];
134+
}
135+
return t;
136+
}
137+
}
138+
```
139+
140+
### **C++**
141+
142+
```cpp
143+
class Solution {
144+
public:
145+
int minCostSetTime(int startAt, int moveCost, int pushCost, int targetSeconds) {
146+
int m = targetSeconds / 60, s = targetSeconds % 60;
147+
return min(f(m, s, startAt, moveCost, pushCost), f(m - 1, s + 60, startAt, moveCost, pushCost));
148+
}
149+
150+
int f(int m, int s, int prev, int moveCost, int pushCost) {
151+
if (m < 0 || m > 99 || s < 0 || s > 99) return INT_MAX;
152+
vector<int> arr = {m / 10, m % 10, s / 10, s % 10};
153+
int i = 0;
154+
for (; i < 4 && arr[i] == 0; ++i);
155+
int t = 0;
156+
for (; i < 4; ++i)
157+
{
158+
if (arr[i] != prev) t += moveCost;
159+
t += pushCost;
160+
prev = arr[i];
161+
}
162+
return t;
163+
}
164+
};
165+
```
93166

167+
### **Go**
168+
169+
```go
170+
func minCostSetTime(startAt int, moveCost int, pushCost int, targetSeconds int) int {
171+
m, s := targetSeconds/60, targetSeconds%60
172+
f := func(m, s int) int {
173+
if m < 0 || m > 99 || s < 0 || s > 99 {
174+
return 0x3f3f3f3f
175+
}
176+
arr := []int{m / 10, m % 10, s / 10, s % 10}
177+
i := 0
178+
for ; i < 4 && arr[i] == 0; i++ {
179+
}
180+
t := 0
181+
prev := startAt
182+
for ; i < 4; i++ {
183+
if arr[i] != prev {
184+
t += moveCost
185+
}
186+
t += pushCost
187+
prev = arr[i]
188+
}
189+
return t
190+
}
191+
return min(f(m, s), f(m-1, s+60))
192+
}
193+
194+
func min(a, b int) int {
195+
if a < b {
196+
return a
197+
}
198+
return b
199+
}
94200
```
95201

96202
### **TypeScript**

solution/2100-2199/2162.Minimum Cost to Set Cooking Time/README_EN.md

Lines changed: 107 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,119 @@ Note other possible ways are 0076, 076, 0116, and 116, but none of them produces
7272
### **Python3**
7373

7474
```python
75-
75+
class Solution:
76+
def minCostSetTime(self, startAt: int, moveCost: int, pushCost: int, targetSeconds: int) -> int:
77+
def f(m, s):
78+
if not 0 <= m < 100 or not 0 <= s < 100:
79+
return inf
80+
arr = [m // 10, m % 10, s // 10, s % 10]
81+
i = 0
82+
while i < 4 and arr[i] == 0:
83+
i += 1
84+
t = 0
85+
prev = startAt
86+
for v in arr[i:]:
87+
if v != prev:
88+
t += moveCost
89+
t += pushCost
90+
prev = v
91+
return t
92+
93+
m, s = divmod(targetSeconds, 60)
94+
ans = min(f(m, s), f(m - 1, s + 60))
95+
return ans
7696
```
7797

7898
### **Java**
7999

80100
```java
101+
class Solution {
102+
public int minCostSetTime(int startAt, int moveCost, int pushCost, int targetSeconds) {
103+
int m = targetSeconds / 60;
104+
int s = targetSeconds % 60;
105+
return Math.min(f(m, s, startAt, moveCost, pushCost), f(m - 1, s + 60, startAt, moveCost, pushCost));
106+
}
107+
108+
private int f(int m, int s, int prev, int moveCost, int pushCost) {
109+
if (m < 0 || m > 99 || s < 0 || s > 99) {
110+
return Integer.MAX_VALUE;
111+
}
112+
int[] arr = new int[]{m / 10, m % 10, s / 10, s % 10};
113+
int i = 0;
114+
for (; i < 4 && arr[i] == 0; ++i);
115+
int t = 0;
116+
for (; i < 4; ++i) {
117+
if (arr[i] != prev) {
118+
t += moveCost;
119+
}
120+
t += pushCost;
121+
prev = arr[i];
122+
}
123+
return t;
124+
}
125+
}
126+
```
127+
128+
### **C++**
129+
130+
```cpp
131+
class Solution {
132+
public:
133+
int minCostSetTime(int startAt, int moveCost, int pushCost, int targetSeconds) {
134+
int m = targetSeconds / 60, s = targetSeconds % 60;
135+
return min(f(m, s, startAt, moveCost, pushCost), f(m - 1, s + 60, startAt, moveCost, pushCost));
136+
}
137+
138+
int f(int m, int s, int prev, int moveCost, int pushCost) {
139+
if (m < 0 || m > 99 || s < 0 || s > 99) return INT_MAX;
140+
vector<int> arr = {m / 10, m % 10, s / 10, s % 10};
141+
int i = 0;
142+
for (; i < 4 && arr[i] == 0; ++i);
143+
int t = 0;
144+
for (; i < 4; ++i)
145+
{
146+
if (arr[i] != prev) t += moveCost;
147+
t += pushCost;
148+
prev = arr[i];
149+
}
150+
return t;
151+
}
152+
};
153+
```
81154

155+
### **Go**
156+
157+
```go
158+
func minCostSetTime(startAt int, moveCost int, pushCost int, targetSeconds int) int {
159+
m, s := targetSeconds/60, targetSeconds%60
160+
f := func(m, s int) int {
161+
if m < 0 || m > 99 || s < 0 || s > 99 {
162+
return 0x3f3f3f3f
163+
}
164+
arr := []int{m / 10, m % 10, s / 10, s % 10}
165+
i := 0
166+
for ; i < 4 && arr[i] == 0; i++ {
167+
}
168+
t := 0
169+
prev := startAt
170+
for ; i < 4; i++ {
171+
if arr[i] != prev {
172+
t += moveCost
173+
}
174+
t += pushCost
175+
prev = arr[i]
176+
}
177+
return t
178+
}
179+
return min(f(m, s), f(m-1, s+60))
180+
}
181+
182+
func min(a, b int) int {
183+
if a < b {
184+
return a
185+
}
186+
return b
187+
}
82188
```
83189

84190
### **TypeScript**
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
int minCostSetTime(int startAt, int moveCost, int pushCost, int targetSeconds) {
4+
int m = targetSeconds / 60, s = targetSeconds % 60;
5+
return min(f(m, s, startAt, moveCost, pushCost), f(m - 1, s + 60, startAt, moveCost, pushCost));
6+
}
7+
8+
int f(int m, int s, int prev, int moveCost, int pushCost) {
9+
if (m < 0 || m > 99 || s < 0 || s > 99) return INT_MAX;
10+
vector<int> arr = {m / 10, m % 10, s / 10, s % 10};
11+
int i = 0;
12+
for (; i < 4 && arr[i] == 0; ++i);
13+
int t = 0;
14+
for (; i < 4; ++i)
15+
{
16+
if (arr[i] != prev) t += moveCost;
17+
t += pushCost;
18+
prev = arr[i];
19+
}
20+
return t;
21+
}
22+
};
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
func minCostSetTime(startAt int, moveCost int, pushCost int, targetSeconds int) int {
2+
m, s := targetSeconds/60, targetSeconds%60
3+
f := func(m, s int) int {
4+
if m < 0 || m > 99 || s < 0 || s > 99 {
5+
return 0x3f3f3f3f
6+
}
7+
arr := []int{m / 10, m % 10, s / 10, s % 10}
8+
i := 0
9+
for ; i < 4 && arr[i] == 0; i++ {
10+
}
11+
t := 0
12+
prev := startAt
13+
for ; i < 4; i++ {
14+
if arr[i] != prev {
15+
t += moveCost
16+
}
17+
t += pushCost
18+
prev = arr[i]
19+
}
20+
return t
21+
}
22+
return min(f(m, s), f(m-1, s+60))
23+
}
24+
25+
func min(a, b int) int {
26+
if a < b {
27+
return a
28+
}
29+
return b
30+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public int minCostSetTime(int startAt, int moveCost, int pushCost, int targetSeconds) {
3+
int m = targetSeconds / 60;
4+
int s = targetSeconds % 60;
5+
return Math.min(f(m, s, startAt, moveCost, pushCost), f(m - 1, s + 60, startAt, moveCost, pushCost));
6+
}
7+
8+
private int f(int m, int s, int prev, int moveCost, int pushCost) {
9+
if (m < 0 || m > 99 || s < 0 || s > 99) {
10+
return Integer.MAX_VALUE;
11+
}
12+
int[] arr = new int[]{m / 10, m % 10, s / 10, s % 10};
13+
int i = 0;
14+
for (; i < 4 && arr[i] == 0; ++i);
15+
int t = 0;
16+
for (; i < 4; ++i) {
17+
if (arr[i] != prev) {
18+
t += moveCost;
19+
}
20+
t += pushCost;
21+
prev = arr[i];
22+
}
23+
return t;
24+
}
25+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution:
2+
def minCostSetTime(self, startAt: int, moveCost: int, pushCost: int, targetSeconds: int) -> int:
3+
def f(m, s):
4+
if not 0 <= m < 100 or not 0 <= s < 100:
5+
return inf
6+
arr = [m // 10, m % 10, s // 10, s % 10]
7+
i = 0
8+
while i < 4 and arr[i] == 0:
9+
i += 1
10+
t = 0
11+
prev = startAt
12+
for v in arr[i:]:
13+
if v != prev:
14+
t += moveCost
15+
t += pushCost
16+
prev = v
17+
return t
18+
19+
m, s = divmod(targetSeconds, 60)
20+
ans = min(f(m, s), f(m - 1, s + 60))
21+
return ans

0 commit comments

Comments
 (0)