题目描述:
题解:贪心
1.将输入的整数num转为字符串形式num_str。
2.从num_str第一个位置开始,对每个位置i,判断其之后的位置有没有比num_str[i]大的字符greater_num,如果有则记录位置greater_pos(如果有多个相等的greater_num),则取最后一个位置的。
3.因为只交换一次,如果找到了一个比num_str[i]大的值,则停止继续搜索,构造一个新的字符串result,依次向其中添加字符,将num_str[i]与num_str[greater_pos]交换。
4.如果没有找到,则说明输入的数字已经是最大的,直接返回num。
class Solution(object): def maximumSwap(self, num): num_str = str(num) for i in range(len(num_str)): greater_num = '0' greater_pos = -1 c = num_str[i] for j in range(i+1,len(num_str)): if num_str[j]>num_str[i]: greater_num = max(greater_num,num_str[j]) if greater_num==num_str[j]: greater_pos = j if greater_pos!=-1: result = "" for k in range(len(num_str)): if k == i: result = result + num_str[greater_pos] elif k == greater_pos: result = result + num_str[i] else: result = result + num_str[k] return int(result) if greater_pos==-1: return num_str