给定一个字符串num,字符串由0~9的正整数组成,你至多可以交换一次字符串中的任意两位字符,使得交换后的num代表的正整数尽可能大。
1.给定的num不会含有前导0,是一个合法的正整数类型的字符串
2.可以不交换,但是最多只能交换一次
数据范围:
"4556"
"6554"
交换6和4,可以获得最大的正整数6554
"5"
"5"
"8873"
"8873"
不需要交换
char* maximumSwap(char* num ) { // write code here char *ret = num; const char first = *num; char max = *num; int dmax = 0, replace = 0; num++; while (*num != 0) { dmax ++; if (*num >= max && *num > first) { max = *num; replace = dmax; } num++; } if (!replace) { ret ++; if (*ret != 0) { ret = maximumSwap(ret); } ret --; return ret; } else { *ret = ret[replace]; ret[replace] = first; }
package main import "strings" /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @return string字符串 */ func maximumSwap( num string ) string { nums:=strings.Split(num,"") for i:=0;i<len(nums);i++{ max:=i for j:=i+1;j<len(nums);j++{ if nums[j]>=nums[max]{ max=j } } if nums[max]>nums[i]{ nums[max],nums[i]=nums[i],nums[max] break } } return strings.Join(nums,"") }
char* maximumSwap(char* num ) { int len = strlen(num); int index, tmp; for(int i = 0; i < len; i++) { index = i; for(int j = len - 1; j > i; j--) { if(num[j] > num[index]) { index = j; } } if(index != i) { tmp = num[i]; num[i] = num[index]; num[index] = tmp; break; } } return num; }
class Solution { public: char max_char[100005]; int max_index[100005]; string maximumSwap(string num) { int lens = num.size(); if (lens > 1) { max_char[lens - 1] = num[lens - 1]; max_index[lens - 1] = lens - 1; for (int i = lens - 2; i >= 0; i--) { if (num[i] > max_char[i + 1]) { max_char[i] = num[i]; max_index[i] = i; } else { max_char[i] = max_char[i + 1]; max_index[i] = max_index[i + 1]; } } for (int i = 0; i < lens - 1; i++) { if (i != max_index[i] && num[i] != num[max_index[i]]) { char tmp = num[i]; num[i] = num[max_index[i]]; num[max_index[i]] = tmp; break; } } } return num; } };
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @return string字符串 */ string maximumSwap(string num) { int len=num.size(); for(int i=0;i<len-1;i++){ char maxBit=num[i]; int index=0; for(int j=1;j<len;j++){ if(maxBit<=num[j]){ maxBit=num[j]; index=j; } } if(maxBit!=num[i]){ swap(num[i],num[index]); return num; } } return num; } };
求大佬指导下为什么这么写不能通过呀,测试用例很长,也看不出来哪里有问题 string maximumSwap(string num) { // write code here int len=num.size(); for(int i=0;i<len;i++){ int index=i; for(int j=i+1;j<len;j++){ if(num[j]>num[index]){ index=j; } } if(index!=i){ swap(num[i],num[index]); return num; } } return num; }
# @param num string字符串 # @return string字符串 # class Solution: def maximumSwap(self , num: str) -> str: # write code here max_value = num[-1] max_place = len(num)-1 for i in range(len(num)-2,-1,-1): if(num[i] > max_value): max_value = num[i] max_place = i num = list(num) for j in range(0,max_place): if(num[j] < max_value): num[j],num[max_place] = max_value,num[j] break return "".join(num)