Input: s ="165462", k =60Output: 4Explanation: We can partition the string into substrings "16","54","6", and "2". Each substring has a value less than or equal to k =60.It can be shown that we cannot partition the string into less than 4 substrings.
We want to minimize the number of substrings such that each substring’s integer value is at most k. The greedy approach is to make each substring as long as possible without exceeding k.
#include<string>usingnamespace std;
intminimumPartition(string s, int k) {
int n = s.size(), ans =1;
longlong cur =0;
for (char c : s) {
int d = c -'0';
if (d > k) return-1;
if (cur *10+ d > k) {
++ans;
cur = d;
} else {
cur = cur *10+ d;
}
}
return ans;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
funcminimumPartition(sstring, kint) int {
ans:=1cur:=0for_, c:=ranges {
d:= int(c-'0')
ifd > k { return-1 }
ifcur*10+d > k {
ans++cur = d } else {
cur = cur*10+d }
}
returnans}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
classSolution {
publicintminimumPartition(String s, int k) {
int ans = 1;
long cur = 0;
for (char c : s.toCharArray()) {
int d = c -'0';
if (d > k) return-1;
if (cur * 10 + d > k) {
ans++;
cur = d;
} else {
cur = cur * 10 + d;
}
}
return ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
funminimumPartition(s: String, k: Int): Int {
var ans = 1var cur = 0Lfor (c in s) {
val d = c - '0'if (d > k) return -1if (cur * 10 + d > k) {
ans++ cur = d.toLong()
} else {
cur = cur * 10 + d
}
}
return ans
}
1
2
3
4
5
6
7
8
9
10
11
12
13
defminimumPartition(s: str, k: int) -> int:
ans =1 cur =0for c in s:
d = int(c)
if d > k:
return-1if cur *10+ d > k:
ans +=1 cur = d
else:
cur = cur *10+ d
return ans
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
pubfnminimum_partition(s: String, k: i64) -> i32 {
letmut ans =1;
letmut cur =0i64;
for c in s.chars() {
let d = c.to_digit(10).unwrap() asi64;
if d > k { return-1; }
if cur *10+ d > k {
ans +=1;
cur = d;
} else {
cur = cur *10+ d;
}
}
ans
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
functionminimumPartition(s: string, k: number):number {
letans=1;
letcur=0;
for (constcofs) {
constd= Number(c);
if (d>k) return-1;
if (cur*10+d>k) {
ans++;
cur=d;
} else {
cur=cur*10+d;
}
}
returnans;
}