专业网站优化排名,搜索 贵州省住房和城乡建设厅网站,广州网站设计报价,免费wordpress主题2019推荐给定一个非负整数#xff0c;你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736
输出: 7236
解释: 交换数字2和数字7。示例 2 : 输入: 9973
输出: 9973
解释: 不需要交换。注意: 给定数字的范围是 [0, 10^8] 方法一#xff1a;直接遍历 由于对… 给定一个非负整数你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736
输出: 7236
解释: 交换数字2和数字7。示例 2 : 输入: 9973
输出: 9973
解释: 不需要交换。注意: 给定数字的范围是 [0, 10^8] 方法一直接遍历 由于对于整数 num的十进制数字位长最长为 8 位任意两个数字交换一次最多有 28 种不同的交换方法因此我们可以尝试遍历所有可能的数字交换方法即可并找到交换后的最大数字即可。 我们将数字存储为长度为 n 的列表其中 n 为整数 num的十进制位数的长度。对于位置为 (i, j)的每个候选交换我们交换数字并记录组成的新数字是否大于当前答案 对于前导零的问题我们也不需要特殊处理。由于数字只有 8 位所以我们不必考虑交换后溢出的风险
class Solution {
public:int maximumSwap(int num) {string charArry to_string(num);int n charArry.size();int maxNum num;for(int i0;in;i){for(int ji1;jn;j){swap(charArry[i],charArry[j]);maxNum max(maxNum,stoi(charArry));swap(charArry[i],charArry[j]);}}return maxNum;}
}; 方法二贪心
从右向左记录一个最大数和最左边的比它小的数交换
class Solution {
public:int maximumSwap(int num) {string charArray to_string(num);int n charArray.size();int maxIdx n - 1;int idx1 -1, idx2 -1;for (int i n - 1; i 0; i--) {if (charArray[i] charArray[maxIdx]) {maxIdx i;} else if (charArray[i] charArray[maxIdx]) {idx1 i;idx2 maxIdx;}}if (idx1 0) {swap(charArray[idx1], charArray[idx2]);return stoi(charArray);} else {return num;}}
};