NC301. 最大数字交换
描述
示例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; }