前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >670. 最大交换

670. 最大交换

原创
作者头像
Michel_Rolle
发布2023-08-19 18:13:19
9400
发布2023-08-19 18:13:19
举报
文章被收录于专栏:LeetCode解题LeetCode解题

链接

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 :

代码语言:shell
复制
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
代码语言:shell
复制
输入: 9973
输出: 9973
解释: 不需要交换。
代码语言:shell
复制
/*
从0开始,找到后续最大的那个数x,并且x的下标要最大
举例:13333,相对1而言,x=3,并且下标最大的3是个位的3,彼此交换,33331
只要记录0-9最后出现的位数{-1, 0, -1, 4, -1, -1, -1, -1, -1, -1}
 */
func maximumSwap(num int) int {
	nums := []int{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}
	numstr := []byte(strconv.Itoa(num))
	for i, v := range numstr {
		nums[v-'0'] = i
	}
outter:
	for i := 0; i < len(numstr); i++ {
		tmp := int(numstr[i] - '0')
		//从9开始由大到小找
		for j := 9; j > tmp; j-- {
			//目标的下标大于现在下标
			if nums[j] > i {
				numstr[i], numstr[nums[j]] = numstr[nums[j]], numstr[i]
				break outter
			}
		}

	}

	ret, _ := strconv.Atoi(string(numstr))
	return ret
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com