宝宝也能看懂的 leetcode 周赛 - 172 - 1

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

Hi 你们好,我是张小猪。欢迎来到『宝宝也能看懂』系列之 leetcode 周赛题解。git

这里是第 172 期的第 1 题,也是题目列表中的第 1323 题 -- 『6 和 9 组成的最大数字』github

题目描述

给你一个仅由数字 6 和 9 组成的正整数 numshell

你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。segmentfault

请返回你能够获得的最大数字。函数

示例 1:spa

输入:num = 9669
输出:9969
解释:
改变第一位数字能够获得 6669 。
改变第二位数字能够获得 9969 。
改变第三位数字能够获得 9699 。
改变第四位数字能够获得 9666 。
其中最大的数字是 9969 。

示例 2:code

输入:num = 9996
输出:9999
解释:将最后一位从 6 变到 9,其结果 9999 是最大的数。

示例 3:blog

输入:num = 9999
输出:9999
解释:无需改变就已是最大的数字了。

提示:leetcode

  • 1 <= num <= 10^4
  • num 每一位上的数字都是 6 或者 9 。

官方难度

EASY字符串

解决思路

题目内容很是直白,直白的我纠结了很久应该写些什么。这分明就是针对我小猪嘛,哼(傲娇脸

内容我就不作解释啦,相信小伙伴们都能看明白。不过这里说一点容易被忽略的事情,就是咱们的翻转次数须要小于等于 1,也就是说实际上是能够不翻转的。例如对于 9,咱们就没必要要作翻转了。

关于思路的话,相信小伙伴们立刻就能想到,我也就不作过多分析啦。总结一句话归纳就是,把可能的最高位的 6 替换为 9 便可。若是不存在 6 则直接返回。下面小猪尝试了 3 种不一样的方式来实现这个需求,也欢迎小伙伴们提供其余的方式鸭。

字符串替换

这个思路很是直接,就是把数字看成字符串来处理,并替换能发现的第一个 '6' 为 '9' 便可。在 JS 中,字符串的 replace 方法正好能够只替换第一个匹配值,因而咱们能够以下来方便的实现:

const maximum69Number = num => Number(num.toString().replace('6', '9'));

数字运算

从数字自己出发,咱们能够尝试从最高位开始一位一位的寻找可能的 6,而后加上对应的值便可。因为题目限制了 num 的范围是 [1, 10^4],因此咱们只须要依次判断千位、百位、十位、个位。关于这个对应的值,咱们能够举个例子,例如发现了千位是 6,那么咱们把原来的数加上 3000 就能够啦。具体代码以下:

const maximum69Number = num => {
  if (num / 1000 << 0 === 6) return num + 3000;
  if ((num / 100 << 0) % 10 === 6) return num + 300;
  if (num % 100 / 10 << 0 === 6) return num + 30;
  if (num % 10 === 6) return num + 3;
  return num;
};

打表法

当当当当,是时候再次祭出这个看起来很无耻的方法啦,哈哈哈哈嗝,笑出猪叫 >.<

根据题目对于 num 的范围限制,以及它只能包含 6 和 9 这两个数字,因此其实可选范围很小的。咱们只须要用代码来生成一个包含全部可能的字典便可。

既然又提到了字典,那么就该使用咱们的魔法咒语啦,小伙伴们还记得咒语么?『巴拉巴拉 张小猪是最棒(pang)哒』。心神合一的念完这个咒语咱们就获得了下面的这个字典:

const map = {
  6: 9,
  9: 9,
  66: 96,
  69: 99,
  96: 99,
  99: 99,
  666: 966,
  669: 969,
  696: 996,
  699: 999,
  966: 996,
  969: 999,
  996: 999,
  999: 999,
  6666: 9666,
  6669: 9669,
  6696: 9696,
  6699: 9699,
  6966: 9966,
  6969: 9969,
  6996: 9996,
  6999: 9999,
  9666: 9966,
  9669: 9969,
  9696: 9996,
  9699: 9999,
  9966: 9996,
  9969: 9999,
  9996: 9999,
  9999: 9999
};

那么既然有了字典,最终咱们的函数只须要直接返回映射值就好啦。是否是很简单鸭,小猪骄傲的摸了摸猪鼻子,耶~

const maximum69Number = num => map[num];

总结

虽然仍是惯例的保底送分题,不太小猪仍是尝试从不一样的方向提供一些思路。其中小猪本身最喜欢的固然仍是打表法啦,由于够帅(wu)气(chi),哈哈哈哈嗝。小伙伴们最喜欢哪种呢,不妨留言告诉小猪哟。

这大概会是年前的最后一期周赛题解了吧,但愿小猪不要由于 峡谷吃鸡 努力工做而拖更,嗯嗯(严肃脸

相关连接

qrcode_green.jpeg

相关文章
相关标签/搜索