1323. 6 和 9 组成的最大数字『简单』
题目来源于力扣(LeetCode)
一、题目
题目相关标签:数学
提示:
1 <= num <= 10^4
num
每一位上的数字都是 6 或者 9 。
二、解题思路
2.1 转换字符串方式
-
将数值转换成字符串方式
-
通过字符串的替换方法,将首次出现的字符 6 改变(替换)为 9
为什么是首次?
题目要求: 最多只能翻转一位数字
为什么是字符 6 替换为 9?
题目要求: 需要返回可以得到的最大数字,那么只能是高位(左边)的字符 6 改变成 9,因为把字符 9 改变成 6 只会把数变小
2.2 数学计算方式
-
根据给定的 num 范围:1 <= num <= 10 ^ 4(10000)对 num 进行分段的判断与计算
-
同理,需要将高位上的 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);
}