188. Insert five
Given a number, insert a 5 at any position of the number to make the number after insertion the largest
Example
Example 1:
Input: a = 234
Output: 5234
Notice
|a| ≤ 10^6
解法1:先弄成字符串再处理比较方便。
注意分正数和负数两种情况考虑。
class Solution {
public:
/**
* @param a: A number
* @return: Returns the maximum number after insertion
*/
int InsertFive(int a) {
string a_str = to_string(a);
bool occured = false;
int n = a_str.size();
if (a >= 0) {
for (int i = 0; i < n; ++i) {
if (a_str[i] == '+') continue;
if (a_str[i] - '0' < 5) {
a_str.insert(i, "5");
occured = true;
break;
}
}
if (!occured) a_str = a_str + '5';
} else {
for (int i = 0; i < n; ++i) {
if (a_str[i] == '-') continue;
if (a_str[i] - '0' > 5) {
a_str.insert(i, "5");
occured = true;
break;
}
}
if (!occured) {
a_str = a_str + '5';
}
}
return atoi(a_str.c_str());
}
};
二刷:
class Solution {
public:
/**
* @param a: A number
* @return: Returns the maximum number after insertion
*/
int insertFive(int a) {
bool isNeg = a < 0 ? true : false;
if (isNeg) a = -a;
string aStr = to_string(a);
int pos = -1;
for (int i = 0; i < aStr.size(); i++) {
if (isNeg) {
if (aStr[i] - '0' > 5) {
cout << " pos =" << pos << endl;
pos = i;
break;
}
}
else if (aStr[i] - '0' < 5) {
pos = i;
break;
}
}
if (pos == -1) {
if (isNeg) aStr = aStr + '5';
else aStr = '5' + aStr;
} else {
aStr = aStr.substr(0, pos) + '5' + aStr.substr(pos);
}
return isNeg ? -stoi(aStr) : stoi(aStr);
}
};