iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0

觀前提醒:

  1. 我預設大家已經先思考並分析過題目,沒啥想法才開始 google 找解題靈感。若無,建議每題先花 1~2 顆番茄鐘的時間來分析題目比較好。可參考番茄鐘工作法
  2. 承上,既然已經有思考過了,那我這邊直接 po 題目 + 解題想法 + code +心得 。若已經在 code 內有足夠的註解了,那我可能解題想法 & 心得的部分就不會寫太多,免得干擾你的思考。
  3. 所有解法都是已經取得系統的 Accepted,但或許不是最優解法,請多包涵。
  4. 若對於解法不太懂,可以嘗試用 Chrome 的 debugger 來試跑看看 (教學文)
  5. 最後,歡迎在下面留言指教~教學相長才會進步歐~/images/emoticon/emoticon41.gif

題目

Write a program that outputs the string representation of numbers from 1 to n.

But for multiples of three it should output “Fizz” instead of the number and for the multiples of five output “Buzz”. For numbers which are multiples of both three and five output “FizzBuzz”.

Example:

n = 15,

Return:
[
    "1",
    "2",
    "Fizz",
    "4",
    "Buzz",
    "Fizz",
    "7",
    "8",
    "Fizz",
    "Buzz",
    "11",
    "Fizz",
    "13",
    "14",
    "FizzBuzz"
]

解題想法

題目簡單說,就是"3的倍數顯示 Fizz "、"5的倍數顯示 Buzz "、"15的倍數顯示 FizzBuzz "。
我們只要利用餘數的觀念,問題就能迎刃而解~
來看一下維基百科上的解釋:

在算術中,當兩個整數相除的結果不能以整數商表示時,餘數便是其「餘留下的量」。當餘數為零時,被稱為整除。

進一步推理:我們可以整理成以下想法

  • 先令某數為 X
  • 則當 X 對 3 取餘數,餘數為零時,則顯示"Fizz"
  • 當 X 對 5 取餘數,餘數為零時,則顯示"Buzz"
  • 當 X 對 15 取餘數,餘數為零時,則顯示"FizzBuzz"

提醒:程式執行時,順序是一行一行下來。所以最嚴格最特殊的條件,應該要放在前面優先執行。所以我們的當 X 對 15 取餘數,餘數為零時,則顯示"FizzBuzz"。要優先寫在 if-else 的判斷式中~

CODE

/**
 * @param {number} n
 * @return {string[]}
 */
var fizzBuzz = function (n) {
  let arrOfString = [];
  for (let i = 1; i <= n; i++) {
    if (i % 15 === 0) {
      arrOfString.push("FizzBuzz");
    } else if (i % 5 === 0) {
      arrOfString.push("Buzz");
    } else if (i % 3 === 0) {
      arrOfString.push("Fizz");
    } else {
      arrOfString.push(String(i));
    }
  }
  return arrOfString;
};

心得

這也是 LeetCode 中,知名度跟 Two Sum 並駕齊驅的經典題目啊,剛開始小卡了一下,後來把判斷式的順序調整下,結果就順利出來惹~~~/images/emoticon/emoticon01.gif


謝謝大家的收看,LeetCode 小學堂我們下次見~/images/emoticon/emoticon29.gif


上一篇
[LeetCode with JavaScript] Day 15: Climbing Stairs
下一篇
[LeetCode with JavaScript] Day 17: Fibonacci_Number
系列文
[LeetCode with JavaScript] 一起來刷 LeetCode吧 ~~~ (ノ>ω<)ノ30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言