给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736 输出: 7236 解释: 交换数字2和数字7。
示例 2 :
输入: 9973 输出: 9973 解释: 不需要交换。
注意:
-
给定数字的范围是
[0, 108]
如何进行“最大交换”?其实很简单:从后面的数字中,找出一个最大数与最高位进行交换。如果后面的最大数小于等于最高位的数字,则把最高位“向后”移一位,再从剩下的数字中寻找最大的数字。
有一点需要特别注意,如果后面的数字的最大数存在多个,则最高位需要跟最低位的数字进行交换。(保持高位的最大数字不变,可以保证数字更大。)
网友对贪心算法的一句话总结:每一位数字应该不小于所有排它后面的数字,否则找最大的且排最后面的数字与之交换。
- 一刷
-
link:{sourcedir}/_0670_MaximumSwap.java[role=include]