算法初探LeetCode-6和9组成的最大数字

112 阅读2分钟

LeetCode1323:6和9组成的最大数字

给你一个仅由数字 6 和 9 组成的正整数 num。 你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。 请返回你可以得到的最大数字。

示例 1:

输入: num = 9669
输出: 9969
解释:
改变第一位数字可以得到 6669 
改变第二位数字可以得到 9969 
改变第三位数字可以得到 9699 
改变第四位数字可以得到 9666 
其中最大的数字是 9969 

示例 2:

输入: num = 9996
输出: 9999
解释: 将最后一位从 6 变到 9,其结果 9999 是最大的数。

示例 3:

输入: num = 9999
输出: 9999
解释: 无需改变就已经是最大的数字了。

提示:

  • 1<=num<=1041 <= num <= 10^4
  • num 每一位上的数字都是 6 或者 9 。

思路分析

题目要求的是返回最大的数字,那肯定是把6转成9 所以只要把第一个6转成9就是最大的数。1.将num表示成数组的形式; 2.将最大值先复制给num; 3.从最高位开始替换,如果是‘6’,替换成‘9’,并停止循环

分为三步: 1、数字存进数组,个位存进数组0索引,依次向下。 2、找数字中9的最高位(也就是数组倒序查找9)。 3、将数组中的数字输出,从索引0(个位)依次输出,每次乘10.

算法代码

public int maximum69Number(int num) {
    int[] res = new int[4];
    int count = 0, ans = 0, mut = 1, x = num;
    while (x != 0) {
        res[count++] = x % 10;
        x = x / 10;
    }
    count--;
    for (int i = count; i >= 0; i--) {
        if (res[i] == 6) {
            res[i] = 9;
            break;
        }
    }
    for (int i = 0; i <= count; i++) {
        ans += res[i] * mut;
        mut *= 10;
    }
    return ans;
}

结果详情

Snipaste_2023-04-12_23-07-04.png

算法复杂度

  • 空间复杂度:O(1)O(1)
  • 时间复杂度:O(n2)O(n^2)

掘金(JUEJIN)一起进步,一起成长!