幂等问题 vs 如何判断是否是4的幂
判斷是否是4的冪
- 🤹序言
- 🚴一、需求分析 - 判斷是否是4的冪等
- 🤾二、實現版本
- 1. 版本一:中規中矩法
- 2. 版本二:按位與
- 3. 版本三:按位與優化
- 4. 版本四:正則匹配法
- ??三、結束語
- 🤼往期推薦
🤹序言
我們以前在做數學的時候,經常會有各種冪等計算。比如說,40=1;41=4;42=16;43=64;44=256;像諸如此類的計算就是冪等。
那如果把它放到前端的程序中,又該如何來說判斷呢?
🚴一、需求分析 - 判斷是否是4的冪等
首先,我們想要實現的是,當輸入一個數時,點擊判斷。如果符合4的冪,那么輸入框里面的數變為綠色;反之不符合的話,那么輸入框的數就變為紅色。如下圖所示:
那么接下來,我們由淺入深的來講解一種實現效果。
🤾二、實現版本
1. 版本一:中規中矩法
先附上代碼:
HTML 代碼:
<input id="num" value="65536"></input> <button id="checkBtn">判斷</check>CSS 代碼:
#num {color: black; }#num.yes {color: green; }#num.no {color: red; }JS 代碼:
funciton isPowerOfFour(num) {num = parseInt(num);while(num > 1) {if(num % 4) return false;num /= 4;}return true; }最中規中矩的方法是上面這一種方法,首先先將 num 對 4 取余,如果發現取余后不為 0 ,那么返回 false ;
如果滿足,那么繼續對 num 進行除以 4 操作,以此步驟進行循環,直到 num <= 1 為止。
2. 版本二:按位與
先附上代碼:
HTML 代碼:
<input id="num" value="65536"></input> <button id="checkBtn">判斷</check>CSS 代碼:
#num {color: black; }#num.yes {color: green; }#num.no {color: red; }JS 代碼:
function isPowerOfFour(num) {num = parseInt(num);while(num > 1) {// 對4取余相當于判斷二進制數的末兩位if(num & 0b11) return false;// 將 num 右移兩位num >>>= 2;}return true; }第二種方式我們可以采用按位與操作,對 4 取余就相當于判斷二進制數的末兩位,也就是 0b11 。之后將 num 右移兩位,即 num >>>= 2 。
3. 版本三:按位與優化
先附上代碼:
HTML 代碼:
<input id="num" value="65536"></input> <button id="checkBtn">判斷</check>CSS 代碼:
#num {color: black; }#num.yes {color: green; }#num.no {color: red; }JS 代碼:
function isPowerOfFour(num) {num = parseInt(num);return num > 0 &&(num & (num - 1)) === 0 &&(num & 0xAAAAAAAA) === 0 }版本二事實上是 log(n) 的一個事件復雜度,那我們還可以再繼續優化,也就是上面的版本三,常數復雜度的算法 O(1) 。
首先第一個條件是, num 必須大于 0 。
第二個條件呢,是 (num & (num - 1)) === 0 。用于在每一次計算后去掉當前數最末位的 1 。如果數字只有一個 1 時,過濾出數字里面只有一個 1 的二進制數。
第三個條件是判斷,這些數的末位不能有 1 、3 、 5 、 7 、9 等奇數個 0 的情況。
對于這種算法來說,算是性能相對較好、代碼相對也比較簡潔,所以在實際的使用中,還是值得使用的。
4. 版本四:正則匹配法
先附上代碼:
HTML 代碼:
<input id="num" value="65536"></input> <button id="checkBtn">判斷</check>CSS 代碼:
#num {color: black; }#num.yes {color: green; }#num.no {color: red; }JS 代碼:
function isPowerOfFour(num) {// 先把 num 轉成一個二進制的字符串num = parseInt(num).toString(2);// 再用正則表達式來匹配這個二進制的字符串return /^1(?:00)*$/.test(num); }如果遇到計算規模不是很大的時候,我們還可以用正則表達式的方式來處理。上面這種方法利用 JavaScript 轉換字符串和正則的特性,來對 4 的冪等進行計算。
相比于第三種方法來說,時間開銷確實會大一點,但還是算在可以接受的范圍內。
??三、結束語
在上面的文章中,我們使用了 4 種方法來解決冪等問題,有時間復雜度很低的按位與優化,還有簡潔明了的正則匹配法。不知道大家是否都掌握了呢?
如果您覺得這篇文章有幫助到您的的話不妨點贊支持一下喲~~😉
🤼往期推薦
👉緊跟月影大佬的步伐,一起來學習如何寫好JS(上)
👉緊跟月影大佬的步伐,一起來學習如何寫好JS(下)
👉每天都在紅綠燈前面梭行,不如自己來實現個紅綠燈?
總結
以上是生活随笔為你收集整理的幂等问题 vs 如何判断是否是4的幂的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天都在红绿灯前面梭行,不如自己来实现个
- 下一篇: 如何有效的降低电脑屏幕蓝光电脑如何改蓝光