【力扣 leetcode】670:最大交换

发布于:2022-12-19 ⋅ 阅读:(302) ⋅ 点赞:(0)

每日进步

  • 整数转字符串: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
著作权归领扣网络所有,本文仅供个人学习,非商用。


网站公告

今日签到

点亮在社区的每一天
去签到