题目来源
力扣670最大交换
题目概述
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
解题思路
- 我们能确定 组成的最大数从最高位到最低位应该是降序排序的;
- 我们只需要知道每一位应该填入的数字,并且找到不符合的最高数位i;
- 交换i与最后一个最大值j即可。
代码实现
java实现
public class Solution { public int maximumSwap(int num) { // 统计每个数出现的次数,用于找最大值 int[] count = new int[10]; // 将入参转为数组 int[] numberToArray = new int[8]; // 记录入参长度 int length = 0; int n = num; while (n > 0) { int current = n % 10; numberToArray[length++] = current; count[current]++; n /= 10; } // 最高位在最后 int currentIndex = length - 1; // 最大值为9 int maxIndex = 9; while (maxIndex >= 0) { // 寻找当前最大值 while (maxIndex >= 0 && count[maxIndex] == 0){ maxIndex--; } // 如果当前最大值和当前最高位符合,继续找 if (currentIndex >= 0 && maxIndex == numberToArray[currentIndex]) { count[maxIndex]--; currentIndex--; }else { break; } } // 符合最大数要求,直接返回 if (currentIndex == 0) { return num; } // 交换找到的最高位和其后最大值 for (int i = 0; i < currentIndex; i++) { if (numberToArray[i] == maxIndex) { int temp = numberToArray[i]; numberToArray[i] = numberToArray[currentIndex]; numberToArray[currentIndex] = temp; } } // 组成结果返回 int result = 0; for (int i = length - 1; i >= 0; i--) { result *= 10; result += numberToArray[i]; } return result; } }
c++实现
class Solution { public: int maximumSwap(int num) { // 记录每个数出现的次数 int count[10] = {0}; // 入参转数组 int numberToArray[8] = {0}; // 记录入参长度 int length = 0; int n = num; while (n > 0) { int current = n % 10; numberToArray[length++] = current; count[current]++; n /= 10; } // 最高位在最后 int currentIndex = length - 1; // 最大值为9 int maxIndex = 9; while (maxIndex >= 0) { // 寻找当前最大值 while (maxIndex >= 0 && count[maxIndex] == 0){ maxIndex--; } // 如果当前最大值和当前最高位符合,继续找 if (currentIndex >= 0 && maxIndex == numberToArray[currentIndex]) { count[maxIndex]--; currentIndex--; }else { break; } } // 符合最大数要求,直接返回 if (currentIndex == 0) { return num; } // 交换找到的最高位和其后最大值 for (int i = 0; i < currentIndex; i++) { if (numberToArray[i] == maxIndex) { int temp = numberToArray[i]; numberToArray[i] = numberToArray[currentIndex]; numberToArray[currentIndex] = temp; } } // 组成结果返回 int result = 0; for (int i = length - 1; i >= 0; i--) { result *= 10; result += numberToArray[i]; } return result; } };
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章