LeetCode 670. 最大交换

发布时间:2024年01月22日

目录

一、题目

1、题目描述

2、接口描述

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。

示例 1 :

输入: 2736
输出: 7236
解释: 交换数字2和数字7。

2、接口描述

?
class Solution {
public:
    int maximumSwap(int num) {

    }
};

3、原题链接

670. 最大交换


二、解题报告

1、思路分析

贪心的考虑,肯定优先把高位跟大数字交换,我们从高位遍历,如果高位右边有数组比高位大,那么和右边最大数字且最靠右的那个交换即可

2、复杂度

时间复杂度:O(log num)?空间复杂度:O(log num)

3、代码详解

?
class Solution {
public:

    int maximumSwap(int num) {
        int d[10] , pre[10]{0} , n = 0;
        while(num) {
            d[++n] = num % 10 , num /= 10;
            pre[n + 1] = d[pre[n]] >= d[n] ? pre[n] : n; 
        }
        for(int i = n ; i >= 1 ; i--)
            if(d[pre[i]] > d[i]){
                swap(d[i] , d[pre[i]]);
                break;
            }
        for(int i = n ; i >= 1 ; i--)
            num = (num << 3) + (num << 1) + d[i];
        return num;
    }
};

文章来源:https://blog.csdn.net/EQUINOX1/article/details/135745979
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。