一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第28天,点击查看活动详情。
题目
给你一个仅由数字 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^4num每一位上的数字都是 6 或者 9 。
思考
本题难度简单。题目要求我们对仅由数字 6 和 9 组成的正整数 num进行翻转,只翻转一位数字,并返回可以得到的最大数字。
考虑到取值范围是1 <= num <= 10^4,是正整数,那么我们可以只翻转最高位上的数字6为9,可知得到的数字的数值是最大的。
我们只需要找出该数字并进行替换。我们可以将字符串拆分为对应的数组,然后遍历数组,当碰到第一个数字6时,改为9,然后返回该数组对应的新数字即可。
同时,我们可以考虑使用String.prototype.replace方法,该方法正好可以只替换第一个匹配值,然后再将得到的结果转为数字即可。该方法显得很精简!
解答
方法一:遍历
/**
* @param {number} num
* @return {number}
*/
var maximum69Number = function(num) {
return +(num + '').replace('6', '9')
}
// console.log(maximum69Number(9669)) // 9969
// 执行用时:64 ms, 在所有 JavaScript 提交中击败了44.31%的用户
// 内存消耗:41.1 MB, 在所有 JavaScript 提交中击败了44.91%的用户
// 通过测试用例:153 / 153
复杂度分析:
- 时间复杂度: O(n),我们需要遍历字符串一次。
- 空间复杂度:O(1)。