leetcode

来源:互联网 发布:小米note双卡设置网络 编辑:程序博客网 时间:2024/06/04 01:31

题目

Given a non-negative integer, you could swap two digits at most once to get the maximum valued number. Return the maximum valued number you could get.

Example 1:

Input: 2736Output: 7236Explanation: Swap the number 2 and the number 7.

Example 2:

Input: 9973Output: 9973Explanation: No swap.

Note:

  1. The given number is in the range [0, 108]

分析及解答

  • 高位的数字变大,对于整个数的影响是很大的。
  • 同时,交换时,应将对于对于低位的影响最小化。(交换导致低位变小)

public int maximumSwap(int num) {if (num <= 10) {return num;}//转成字符串,更方便处理。char[] strArr = String.valueOf(num).toCharArray();char max = '0';int[] dp = new int[strArr.length];//dp[i]存储 i 后面的最大的数字。dp[strArr.length - 1] = strArr.length - 1;for (int i = strArr.length - 1; i >= 0; i--) {if (max < strArr[i]) { // 不选择等于。(只有比其大的数才有交换意义)max = strArr[i];dp[i] = i;} else {dp[i] = dp[i-1];}}for (int i = 0; i < dp.length; i++) {if (dp[i] > i && strArr[i] != strArr[dp[i]]) {char tmp = strArr[i];strArr[i] = strArr[dp[i]];strArr[dp[i]] = tmp;break; //忘记加,导致bug.}}return Integer.valueOf(new String(strArr));}


原创粉丝点击