forked from sureshmangs/Code
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1881. Maximum Value after Insertion.cpp
67 lines (46 loc) · 1.86 KB
/
1881. Maximum Value after Insertion.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
You are given a very large integer n, represented as a string,?????? and an integer digit x. The digits in n and the digit x are in the inclusive range [1, 9], and n may represent a negative number.
You want to maximize n's numerical value by inserting x anywhere in the decimal representation of n??????. You cannot insert x to the left of the negative sign.
For example, if n = 73 and x = 6, it would be best to insert it between 7 and 3, making n = 763.
If n = -55 and x = 2, it would be best to insert it before the first 5, making n = -255.
Return a string representing the maximum value of n?????? after the insertion.
Example 1:
Input: n = "99", x = 9
Output: "999"
Explanation: The result is the same regardless of where you insert 9.
Example 2:
Input: n = "-13", x = 2
Output: "-123"
Explanation: You can make n one of {-213, -123, -132}, and the largest of those three is -123.
Constraints:
1 <= n.length <= 105
1 <= x <= 9
The digits in n??? are in the range [1, 9].
n is a valid representation of an integer.
In the case of a negative n,?????? it will begin with '-'.
class Solution {
public:
string maxValue(string s, int x) {
int n = s.length();
string res = "";
if (s[0] == '-') {
char cx = x + '0';
for (int i = 1; i < n; i++) {
if (cx < s[i]) {
res = s.substr(0, i) + cx + s.substr(i, n);
break;
}
}
if (res.size() == 0) res = s + cx;
} else {
char cx = x + '0';
for (int i = 0; i < n; i++) {
if (cx > s[i]) {
res = s.substr(0, i) + cx + s.substr(i, n);
break;
}
}
if (res.size() == 0) res = s + cx;
}
return res;
}
};