【LeetCode】1323. 6 和 9 组成的最大数字
这是第 172 场周赛的第一题,很简单
题目链接:1323. 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 <= 10^4
num
每一位上的数字都是6
或者9
。
**总体思路:**由示例可以看出,只要将给定数字中第一个6
替换为9
即可。
方法一:Java 现成的方法
Java String 类下有一个名为 replaceFirst
的方法,用给定的字符串替换与给定的正则表达式匹配的此字符串的第一个子字符串。下面是 Oracle 官方文档对其的描述:
class Solution {
public int maximum69Number (int num) {
String str = String.valueOf(num);
str = str.replaceFirst("6", "9");
return Integer.valueOf(str);
}
}
此方法优点是简单方便,核心只是调用 replaceFirst
那一句,自己什么都不用做;缺点是效率比较低。
方法二:数组
将字符串转换为字符数组,对数组进行遍历,将遇到的第一个字符6
替换为9
即可。此方法比方法一稍微麻烦一点点,但也非常简单了,而且效率比较高。
class Solution {
public int maximum69Number (int num) {
String str = num + "";
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i ++) {
if (chars[i] == '6') {
chars[i] = '9';
break;
}
}
return Integer.valueOf(new String(chars));
}
}
少一些功利主义的追求,多一些不为什么的坚持