站酷官网首页,物流网站的建设方案总结,那个网站教做菜做的好,镇江网站优化哪家好文章目录 题目描述问题分析程序代码 题目描述 原题链接 给定一个非负整数#xff0c;你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
问题分析
由于至多交换一次数字中的任意两位。
因此#xff0c;我们只需要从右往左遍历#xff08;从个位开始#xff0… 文章目录 题目描述问题分析程序代码 题目描述 原题链接 给定一个非负整数你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
问题分析
由于至多交换一次数字中的任意两位。
因此我们只需要从右往左遍历从个位开始遍历过程中记录右边数字的最大值。然后判断当前值是否比右边数字的最大值要小若符合则交换这两个数则可使交换后的数比原数要大。
从右往左遍历可以确保我们最终找到的那个交换是所有可能中位数最大的交换。
程序代码
func maximumSwap(num int) int {s : []byte(strconv.Itoa(num))n : len(s)// idx记录右边最大的数字idx, p, q : n - 1, -1, -1for i : n - 1; i 0; i-- {if s[i] s[idx] {idx i} else if s[i] s[idx] {p, q i, idx}}// 序列是递减的直接返回if p 0 {return num}s[p], s[q] s[q], s[p]res, _ : strconv.Atoi(string(s))return res
}