原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
基本可以想到贪心法,把靠近左侧高位能进行交换的最高位与右侧低位最大值交换,这种操作只能通过字符串进行,因此一开始应该把数字转换为字符串,随后的操作如下:
设置idex1=-1,idex2=-1,max=n-1;
从右侧开始遍历,寻找最大数字下标max;
若nums[max]>nums[i],说明i是备选用于替换的数值位,记录下i为idex1,同时记录max为idex2;
nums[max] 遍历完成,若idex1!=-1,说明要交换;否则直接返回。
int maximumSwap(int num) {
char charArray[32];
sprintf(charArray, "%d", num);
int n = strlen(charArray);
int max=n-1;
int idx1=-1,idx2=-1;
for(int i=n-1;i>=0;i--){
if(charArray[i]>charArray[max]){
max=i;
}else if(charArray[i]