LeetCode探索(71):1323-6 和 9 组成的最大数字

177 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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^4
  • num 每一位上的数字都是 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)。

参考