列表

详情


NC301. 最大数字交换

描述

给定一个字符串num,字符串由0~9的正整数组成,你至多可以交换一次字符串中的任意两位字符,使得交换后的num代表的正整数尽可能大。
1.给定的num不会含有前导0,是一个合法的正整数类型的字符串
2.可以不交换,但是最多只能交换一次
数据范围:

示例1

输入:

"4556"

输出:

"6554"

说明:

交换6和4,可以获得最大的正整数6554

示例2

输入:

"5"

输出:

"5"

示例3

输入:

"8873"

输出:

"8873"

说明:

不需要交换

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Go 解法, 执行用时: 20ms, 内存消耗: 8288KB, 提交时间: 2022-02-27

package main
//import "fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param num string字符串 
 * @return string字符串
*/
func maximumSwap( num string ) string {
    arr:=[]byte(num)
    i,j:=0,0
    maxI:=0
    for i=0;i<len(num);i++{
        maxI=i
        for j=i;j<len(num);j++{
            if arr[j]>=arr[maxI]{
                maxI=j 
            }
        }
        if i<maxI&&arr[i]<arr[maxI]{
            break
        }
    }
    if i<len(num){
        arr[i],arr[maxI]=arr[maxI],arr[i]
    }
    return string(arr)
}
// 超时
func maximumSwapV1( num string ) string {
    arr:=[]byte(num)
    max:=[]byte(num)
    for i:=0;i<len(num);i++{
        for j:=i+1;j<len(num);j++{
            arr[j],arr[i]=arr[i],arr[j]
            if string(arr)>string(max){
                for k:=0;k<len(max);k++{
                    max[k]=arr[k]
                }
            }
             arr[j],arr[i]=arr[i],arr[j]
        }
    }
    return string(max)
}

Go 解法, 执行用时: 21ms, 内存消耗: 7300KB, 提交时间: 2022-06-16

package main

func maximumSwap( num string ) string {
    arr:=[]byte(num)
    i,j:=0,0
    maxI:=0
    for i=0;i<len(num);i++{
        maxI=i
        for j=i;j<len(num);j++{
            if arr[j]>=arr[maxI]{
                maxI=j 
            }
        }
        if i<maxI&&arr[i]<arr[maxI]{
            break
        }
    }
    if i<len(num){
        arr[i],arr[maxI]=arr[maxI],arr[i]
    }
    return string(arr)
}
func maximumSwapV1( num string ) string {
    arr:=[]byte(num)
    max:=[]byte(num)
    for i:=0;i<len(num);i++{
        for j:=i+1;j<len(num);j++{
            arr[j],arr[i]=arr[i],arr[j]
            if string(arr)>string(max){
                for k:=0;k<len(max);k++{
                    max[k]=arr[k]
                }
            }
             arr[j],arr[i]=arr[i],arr[j]
        }
    }
    return string(max)
}

C 解法, 执行用时: 30ms, 内存消耗: 3624KB, 提交时间: 2022-06-25

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param num string字符串 
 * @return string字符串
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
char* maximumSwap(char* num ) {
    int nLen = strlen(num);
    
    char ch, maxCh, tmp;
    int maxChIndex;
    for (int i = 0; i < nLen; i++) {
        ch = num[i];
        maxCh = ch;
        
        for (int j = i + 1; j < nLen; j++) {
            if (num[j] >= maxCh) {
                maxCh = num[j];
                maxChIndex = j;
            }
        }
        
        if (maxCh != ch) {
            num[maxChIndex] = ch;
            num[i] = maxCh;
            return num;
        }
    }
    
    return num;
}


C++ 解法, 执行用时: 30ms, 内存消耗: 6440KB, 提交时间: 2022-02-21

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param num string字符串 
     * @return string字符串
     */
    string maximumSwap(string num) {
        int flag=1;
        int cnt1=-1;
        int cnt2=-1;
        char c1=num[0];
        char c2=num[1];
        for(int i=num.size()-1;i>=1;i--)
        {
            if(c2<num[i])
            {
                c2=num[i];
                cnt2=i;
            }
            if(c1<num[i])
            {
                flag=0;
                c1=num[i];
                cnt1=i;
            }
        }
        if(flag)
        {
            num[cnt2]=num[1];
            num[1]=c2;
            return num;
        }
        num[cnt1]=num[0];
        num[0]=c1;
        return num;
    }
};

C 解法, 执行用时: 31ms, 内存消耗: 3484KB, 提交时间: 2022-06-16

char* maximumSwap(char* num ) {
    int len = strlen(num);
    for (int i = 0; i < len - 1; i++) {
        int max = num[i];
        int x = i;
        for (int j = i + 1; j < len; j++) {
            if (num[j] >= max) {
                max =  num[j];
                x = j;
            }
        }
        if (max != num[i]) {
            num[x] = num[i];
            num[i] = max;
            return num;
        }
    }
    return num;
}

上一题