寶寶也能看懂的 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

相關文章
相關標籤/搜索