1323. 6 和 9 组成的最大数字『简单』

题目来源于力扣(LeetCode

一、题目

1323. 6 和 9 组成的最大数字

题目相关标签:数学

提示:

  • 1 <= num <= 10^4

  • num 每一位上的数字都是 6 或者 9 。

二、解题思路

2.1 转换字符串方式

  1. 将数值转换成字符串方式

  2. 通过字符串的替换方法,将首次出现的字符 6 改变(替换)为 9

    为什么是首次?

    题目要求: 最多只能翻转一位数字

    为什么是字符 6 替换为 9?

    题目要求: 需要返回可以得到的最大数字,那么只能是高位(左边)的字符 6 改变成 9,因为把字符 9 改变成 6 只会把数变小

2.2 数学计算方式

  1. 根据给定的 num 范围:1 <= num <= 10 ^ 4(10000)对 num 进行分段的判断与计算

  2. 同理,需要将高位上的 6 转换成 9

三、代码实现

3.1 转换字符串方式

public static int maximum69Number(int num) {
    // num == 9999 时无需改变
    if (num == 9999) {
        return num;
    }
    // 转换成字符串
    String str = String.valueOf(num);
    // 利用 replaceFirst 的类库方法,将字符串形式的 num 数首次出现的 6 转换为 9
    String afterReplaceStr = str.replaceFirst("6", "9");
    return Integer.parseInt(afterReplaceStr);
}

3.2 数学计算方式

public static int maximum69Number(int num) {
    // num == 9999 时无需改变
    if (num == 9999) {
        return num;
    }
    // 6999 的情况,6 在第 1 位
    if (num / 1000 == 6) {
        num += 3000;
    }
    // 9699 的情况,6 在第 2 位
    else if (num % 1000 / 100 == 6) {
        num += 300;
    }
    // 9969 的情况,6 在第 3 位
    else if (num % 100 / 10 == 6) {
        num += 30;
    }
    // 9996 的情况,6 在第 4 位
    else if (num % 10 == 6) {
        num += 3;
    }
    return num;
}

四、执行用时

4.1 转换字符串方式

4.2 数学计算方式

五、部分测试用例

public static void main(String[] args) {
//        int num = 9669;  // output:9969
//        int num = 9996;  // output:9999
        int num = 9999;  // output:9999
        int result = maximum69Number(num);
        System.out.println(result);    
}
posted @ 2020-05-11 23:24  知音12138  阅读(236)  评论(0编辑  收藏  举报