【Day 04】LeetCode:Fizz Buzz ( 用 JavaScript 学演算法 )

我们透过 LeetCode #412 Fizz Buzz 来实际感受解决问题的过程 ( 题目连结 )

一、理解题目

  • 输入:一个正整数
  • 从 1 到 n,依序判断是否可以被 3、5、3和5 整除,并有相对应的字串来代表
  • 输出:一个 string array,纪录每个判断的结果

二、Edge Case

是否有极限值或特殊情况:

  • 是否会有负数或 0

三、题目思考

使用哪种资料结构:Array、String

  1. 令 i = 1
  2. 如果 i % 15 = 0,字串 “FizzBuzz”
  3. 如果 i % 3 = 0,字串 “Fizz”
  4. 如果 i % 5 = 0,字串 “Buzz”
  5. 如果都不是,字串 “i”
  6. i = i+1
  7. 回到步骤 2

逻辑:

let arr be an empty array
let str be an empty string

for i (1 to n) do
  if (i%15 = 0) then
    str = "FizzBuzz"
  else if (i%3 = 0) then
    str = "Fizz"
  else if (i%5 = 0) then
    str = "Buzz"
  else
    str = "i" (i to string)
  end if
  
  add str to arr
end for

return arr

程序码实作:

var fizzBuzz = function(n) {
  
  let arr = []
  let str = ""
  
  for (let i=1 ; i<=n ; i++) {
    if (i%15 === 0) {
      str = "FizzBuzz"
    } else if (i%5 === 0) {
      str = "Buzz"
    } else if (i%3 === 0) {
      str = "Fizz"
    } else {
      str = i.toString()
    }
    arr.push(str)
  }
  return arr
  
};

暴力法的改善:

  // 改仅使用阵列变数
  // 透过加号自动转型
  let arr = []
  
  for (let i=1 ; i<=n ; i++) {
    if (i%3 === 0 && i%5 === 0) {
      arr.push("FizzBuzz")
    } else if (i%5 === 0) {
      arr.push("Buzz")
    } else if (i%3 === 0) {
      arr.push("Fizz")
    } else {
      arr.push(i+'')
    }
  }
  return arr

四、优化改善

优化一:字串串接 ( String Concatenation )

如果多出 Divisible by 7 的条件,方法一将会变得很复杂。因此我们调整逻辑判断的流程,并使用字串相加的方式来处理。

  let arr = []
  
  for (let i=1 ; i<=n ; i++) {
    let str = ''
    
    if (i%3 === 0) {
      str += 'Fizz'
    }
    if (i%5 === 0) {
      str += 'Buzz'
    }
    
    // 如果是空字串
    if (!str) {
       str = i + ''
    }
    
    arr.push(str)
  }

五、学到什麽

  • 自动转型:数字加字串
  • 思考程序在不同情境下,是否具有扩充的弹性

原文连结:LeetCode:Fizz Buzz ( 用 JavaScript 学演算法 ) - Ted's Point 泰德观点


<<:  DAY4 Python基础教学(二)

>>:  Day_07 : 让 Vite 来开启你的Vue 之 Vite 核心 esbuild

Azure - Day1 储存体帐户 (Storage Accounts)

Home -> 资源群组(Resource Groups) -> 储存体帐户(Stor...

Day10-"一维阵列"

阵列依据占用空间的大小及编号方式,可分为一维阵列、二维阵列,且必须经过宣告才可使用。 C语言的阵列索...

8 稍微重构一下下,一点就好

昨天我们按照要改动的事项一个一个的做了出牌的方法 今天来调整一下 def play_card(pid...

追求JS小姊姊系列 Day8 -- 郑列展现的工具力(下)

前情提要 郑列终於要展现JS喜欢的工具力了吗? 郑列:是说,有人会跟情敌聊这麽久吗? 我:........

ASP.NET MVC 从入门到放弃(Day14)- Html Css 结构介绍

接下来讲讲 html + CSS + javascript + bootstrap基本介绍细节部分 ...