C语言刷LeetCode每日一题(2024.1.22)670.最大交换

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

C语言刷LeetCode每日一题(2024.1.22)670.最大交换_第1张图片

基本可以想到贪心法,把靠近左侧高位能进行交换的最高位与右侧低位最大值交换,这种操作只能通过字符串进行,因此一开始应该把数字转换为字符串,随后的操作如下:

设置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]=0){
        char temp=charArray[idx1];
        charArray[idx1]=charArray[idx2];
        charArray[idx2]=temp;
        return atoi(charArray);
    }
    return num;

}

你可能感兴趣的:(c语言,leetcode,开发语言)