#8 Codewars - Find the next perfect square! (7 kyu)

更新於 發佈於 閱讀時間約 2 分鐘

題目

原始題目

您可能知道一些相當大的完全平方數。但是下一個呢?

完成 findNextSquare 方法,該方法用於找出參數後的下一個整數完全平方數。回想一下,整數的完全平方數是一個整數n,因此sqrt ( n )也是一個整數。

如果參數本身不是完全平方數,則返回 -1 。您可以假定該參數為非負數。

範例:(輸入->輸出)
121 --> 144
625 --> 676
114 --> -1 since 114 is not a perfect square

拆解流程

依據題意可整理出以下重點:

  • 目標:找出下一個會成為完美平方的整數
  • 規則
  1. 參數傳入的是乘積
  2. 當參數不是完美正方形,需返回 -1
  3. 假設傳入的參數是非負數
  • 方法
  1. 使用 sqrt( ) 方法計算傳入參數的平方根
  2. 將得出的值 +1 並平方,就能得到下一個完全平方數


程式撰寫

  • 使用 Number.isInteger( ) 判斷傳入值是否為整數,就能確認該值是否能成為完整平方數
function findNextSquare(sq) {
let sqNum = Math.sqrt(sq);
if (!Number.isInteger(sqNum)) {
return -1;
}
return (sqNum + 1) ** 2;
}

改善寫法

  • 寫法一:Math.pow(base, exponent)計算基數的指數總和
console.log(Math.pow(7, 2)); //49

因此可改寫如下:

function findNextSquare(sq) {
let sqNum = Math.sqrt(sq);
if (!Number.isInteger(sqNum)) {
return -1;
}
return Math.pow(sqNum + 1, 2);
}
  • 寫法二
  1. 運用餘數判斷平方根後的數值是否為整數
  2. 使用三元運算子決定回傳值
  3. 有運用到 falsy 值概念,0 會轉型成布林型別的 false
function findNextSquare(sq) {
let sqNum = Math.sqrt(sq);
//若傳入的參數可被 1 整除,餘數為 0,那就代表該數是整數
//0 會被轉型成布林型別的 false
//於是會回傳 Math.pow(sqNum + 1, 2)

//如果不能整除,餘數就不為 0
//不為零的數字會被轉型成布林型別的 true
//於是回傳 -1
return sqNum % 1 ? -1 : Math.pow(sqNum + 1, 2);
}

這個寫法相當精簡,原來還可以這樣寫!

今天就介紹到這裡,如果大家有更好的寫法歡迎一起來討論~

留言
avatar-img
留言分享你的想法!
avatar-img
傑米的沙龍
7會員
30內容數
正在一點一滴學習程式,相信知識量總有一天會匯聚成大海,目前專門研究前端中。
傑米的沙龍的其他內容
2023/10/06
要改變表單元素的樣式其實相當麻煩,有些樣式還不能更改,這篇就來探討如何把它們改成喜歡的模樣吧。
Thumbnail
2023/10/06
要改變表單元素的樣式其實相當麻煩,有些樣式還不能更改,這篇就來探討如何把它們改成喜歡的模樣吧。
Thumbnail
2023/10/05
一個超簡單就能達到滾動視差的套件 - AOS
Thumbnail
2023/10/05
一個超簡單就能達到滾動視差的套件 - AOS
Thumbnail
2023/10/04
切版有許多眉角需要注意,來探討那些經常導致切版結果與設計稿產生落差的原因。 一、文字的高度本體是 line-height:🔍 文字所佔據的高度不是由font-size決定,而是line-hight。一開始練習切版時,都想著設定好字的尺寸和字重就 ok 了吧?殊不知這是造成切出來的網頁與設計
Thumbnail
2023/10/04
切版有許多眉角需要注意,來探討那些經常導致切版結果與設計稿產生落差的原因。 一、文字的高度本體是 line-height:🔍 文字所佔據的高度不是由font-size決定,而是line-hight。一開始練習切版時,都想著設定好字的尺寸和字重就 ok 了吧?殊不知這是造成切出來的網頁與設計
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
題目 : 69. Sqrt(x)
Thumbnail
題目 : 69. Sqrt(x)
Thumbnail
這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用4^k 的形式來表達?
Thumbnail
這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用4^k 的形式來表達?
Thumbnail
題目會給定兩個參數,一個是底數x,一個是次方n。要求我們計算出x^n。 要求實作myPow(self, x: float, n: int) -> float 函數的內部邏輯。 也就是說,不可以呼叫程式語言內建計算指數的library
Thumbnail
題目會給定兩個參數,一個是底數x,一個是次方n。要求我們計算出x^n。 要求實作myPow(self, x: float, n: int) -> float 函數的內部邏輯。 也就是說,不可以呼叫程式語言內建計算指數的library
Thumbnail
這題的題目在這裡 題目會給定一個輸入整數x, 要求我們返回x的正整數平方根(取無條件捨去小數部分的正整數值)
Thumbnail
這題的題目在這裡 題目會給定一個輸入整數x, 要求我們返回x的正整數平方根(取無條件捨去小數部分的正整數值)
Thumbnail
題目:您可能知道一些相當大的完全平方數。但是下一個呢?完成 findNextSquare 方法,該方法用於找出參數後的下一個整數完全平方數。回想一下,整數的完全平方數是一個整數n,因此sqrt ( n )也是一個整數。如果參數本身不是完全平方數,則返回 -1 。您可以假定該參數
Thumbnail
題目:您可能知道一些相當大的完全平方數。但是下一個呢?完成 findNextSquare 方法,該方法用於找出參數後的下一個整數完全平方數。回想一下,整數的完全平方數是一個整數n,因此sqrt ( n )也是一個整數。如果參數本身不是完全平方數,則返回 -1 。您可以假定該參數
Thumbnail
題目:建立一個函數,該函數返回給定最小 4 個正整數的數組的兩個最低正數的總和。不會傳入浮點數或非正整數。例如,當一個數組像 [19, 5, 42, 2, 77], 輸出應該是 7。 [10, 343445353, 3453445, 3453545353453] 應該回來 3453
Thumbnail
題目:建立一個函數,該函數返回給定最小 4 個正整數的數組的兩個最低正數的總和。不會傳入浮點數或非正整數。例如,當一個數組像 [19, 5, 42, 2, 77], 輸出應該是 7。 [10, 343445353, 3453445, 3453545353453] 應該回來 3453
Thumbnail
進入選擇敘述語法了。常用的選擇敘述語法,弄懂了就運用自如。
Thumbnail
進入選擇敘述語法了。常用的選擇敘述語法,弄懂了就運用自如。
Thumbnail
比今天的題目示例如下: Input: nums = [-4,-1,0,3,10] Output: [0,1,9,16,100] 簡單來說,要的輸出結果是把陣列內每個數字取平方後,對陣列做排序。
Thumbnail
比今天的題目示例如下: Input: nums = [-4,-1,0,3,10] Output: [0,1,9,16,100] 簡單來說,要的輸出結果是把陣列內每個數字取平方後,對陣列做排序。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News