LeetCode 670: Maximum Swap
Posted keepshuatishuati
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 670: Maximum Swap相关的知识,希望对你有一定的参考价值。
Note:
1. Scan from the small level.
2. Only take the index larger one if same digits.
class Solution { public int maximumSwap(int num) { if (num < 12) { return num; } List<Integer> digits = new ArrayList<>(); while (num > 0) { digits.add(0, num % 10); num /= 10; } int[] rightMax = new int[digits.size()]; rightMax[digits.size() - 1] = digits.size() - 1; for (int i = digits.size() - 2; i >= 0; i--) { rightMax[i] = digits.get(rightMax[i + 1]) < digits.get(i + 1) ? i + 1 : rightMax[i + 1]; } int result = 0; boolean found = false; for (int i = 0; i < digits.size(); i++) { if (!found && i < rightMax[i] && digits.get(i) < digits.get(rightMax[i])) { result = result * 10 + digits.get(rightMax[i]); digits.set(rightMax[i], digits.get(i)); found = true; } else { result = result * 10 + digits.get(i); } } return result; } }
以上是关于LeetCode 670: Maximum Swap的主要内容,如果未能解决你的问题,请参考以下文章