敘述
寫每日練習
- 難度:
Medium
- 花費時間: 30 min
- 題目
給你一個數字 n
,找出這個數字在任何排列下(前面不能為零)如果有 2 的冪次就回傳 true
沒有則回傳 false
。
點我開啟限制與範例
限制:
1 <= n <= 109
Example 1:
1 | Input: n = 1 |
Example 2:
1 | Input: n = 10 |
筆記
看到題目是數學就昏頭轉向了,於是參考了下評論區非常精妙的解答(窮舉),這題主要有幾個重點。
- 題目限制
n
最大是 10^9 ,意即如果他有解,最大也會是 10^9(base 10) == 2^30(base 2) - 如果真的有符合的,那麼那個數字做排序之後會跟
n
做排序之後一樣。
所以重點就是,如果有答案,那麼 n.sort()
會跟 2^30(base 2) 裡面某個數字轉十進位後作 sort()
一樣。
我自己直覺上會想要窮舉 n
的排序,再去檢查,但其實直接窮舉 2^30(base 2) 然後做排序再比較是最快的(因為總共也才 31 個)。
JavaScript
1 | var reorderedPowerOf2 = function(n) { |
成績
JS 成績