-
Notifications
You must be signed in to change notification settings - Fork 3
/
670.cpp
74 lines (71 loc) · 1.98 KB
/
670.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
68
69
70
71
72
73
74
class Solution {
public:
int maximumSwap(int num) {
string numStr = to_string(num);
int maxDigit = -1;
int maxIdx = -1;
int leftIdx = -1;
int rightIdx = -1;
for (int i = numStr.size() - 1; i >= 0; --i) {
if (numStr[i] > maxDigit) {
maxDigit = numStr[i];
maxIdx = i;
continue;
}
if (numStr[i] < maxDigit) {
leftIdx = i;
rightIdx = maxIdx;
}
}
if (leftIdx == -1) return num;
swap(numStr[leftIdx], numStr[rightIdx]);
return stoi(numStr);
}
};
// V2
// class Solution {
// public:
// vector<int> toVector(int num) {
// vector<int> v;
// while (num) {
// v.push_back(num % 10);
// num /= 10;
// }
// reverse(v.begin(), v.end());
// return v;
// }
// int concat(vector<int>& v) {
// int res = 0;
// for (int num : v) {
// res = res * 10 + num;
// }
// return res;
// }
// int maximumSwap(int num) {
// vector<int> numV = toVector(num);
// int n = numV.size();
// for (int i = 0; i < n; ++i) {
// int maxVal = numV[i];
// int maxIdx = -1;
// bool flag = false;
// for (int j = i + 1; j < n; ++j) {
// if (flag) {
// if (numV[j] >= maxVal) {
// maxVal = numV[j];
// maxIdx = j;
// }
// }
// else if (numV[j] > maxVal) {
// maxVal = numV[j];
// maxIdx = j;
// flag = true;
// }
// }
// if (maxIdx != -1) {
// swap(numV[i], numV[maxIdx]);
// return concat(numV);
// }
// }
// return concat(numV);
// }
// };