每日进步
- 整数转字符串:int → \rightarrow → String
String.valueOf(num)
- 字符串转整数:String → \rightarrow → int
Integer.parseInt(str)
- 整数转字符数组:int → \rightarrow → String → \rightarrow → char[]
String.valueOf(num).toCharArray()
- 字符数组转整数:char[] → \rightarrow → String → \rightarrow → int
Integer.parseInt(new String(charArray))
- 取最大值:
Math.max()
- 交换char[]中的两个值:
public void swap(char[] charArray, int i, int j) { char temp = charArray[i]; charArray[i] = charArray[j]; charArray[j] = temp;
题目
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
- 示例 1 :
- 输入: 2736
- 输出: 7236
- 解释: 交换数字2和数字7。
- 示例 2 :
- 输入: 9973
- 输出: 9973
- 解释: 不需要交换。
- 注意:
给定数字的范围是 [ 0 , 1 0 8 ] [0, 10^8] [0,108]
题解
暴力解法一:
双重循环,外循环从最高位开始依次检索是否有高位 d i d_i di可以进行交换;内循环从最高位的下一位 d j d_j dj开始检索,查找剩余位中最大的数值。若 d j > d i d_j > d_i dj>di,则进行交换。
暴力解法二:
先交换,再比较交换前后的大小,保留最大值。
class Solution {
public int maximumSwap(int num) {
char[] num_char = String.valueOf(num).toCharArray();
int num_max = num;
for (int i = 0; i < num_char.length; i++) {
for (int j = i + 1; j < num_char.length; j++) {
swap(num_char, i, j);
num_max = Math.max(num_max, Integer.parseInt(new String(num_char)));
swap(num_char, i, j);
}
}
return num_max;
}
public void swap(char[] num_char, int i, int j) {
char tmp = num_char[i];
num_char[i] = num_char[j];
num_char[j] = tmp;
}
}
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-swap
著作权归领扣网络所有,本文仅供个人学习,非商用。