題目:https://leetcode.com/problems/power-of-three/description/
描述:判斷輸入的數字是否為3的次方數
解題思路(1):用對數的基底變換計算
Learn More →
i = log10(n) / log10(3)
的i
為整數的話代表n
為3的次方數
程式碼:
class Solution {
public boolean isPowerOfThree(int n) {
return n > 0 && (Math.log10(n) / Math.log10(3)) % 1 == 0;
}
}
時間複雜度:O(1)
空間複雜度:O(1)
解題思路(2):如果要找的基底是質數的話還能用另一個技巧,因為質數只能被質數本身和1整除,所以我們可以找出題目輸入的限制中(這題中輸入最大到2^31 - 1
)最大的3的次方數(在這題中會是3^19
),如果輸入n
能被3^19
整除則代表n
也是3的次方數
程式碼:
class Solution {
public boolean isPowerOfThree(int n) {
return n > 0 && Math.pow(3, 19) % n == 0;
}
}
時間複雜度:O(1)
空間複雜度:O(1)
leetcode
easy
math method
題目:https://leetcode.com/problems/power-of-four/description/ 描述:判斷輸入的數字是否為4的次方數 解題思路:標準解法是使用對數基底變換方法,不過這題也可以看作判斷是否為2的次方數的延伸題,4的次方數跟2的次方數一樣用二進位制表示只會有1個位元為1,不過這次這些1只會出現在奇數位上,額外再用一個mask來判斷1是否出現在奇數位即可 程式碼: class Solution { public boolean isPowerOfFour(int n) {
Dec 7, 2022題目:https://leetcode.com/problems/power-of-two/description/ 描述:判斷輸入的數字是否是2的n次方數 解題思路:有個方法能快速找出正整數n是否為2的n次方數/只有一個位元為1:將n與n-1進行位元AND運算,結果為0則n即為2的n次方數/只有一個位元為1 程式碼: class Solution { public boolean isPowerOfTwo(int n) {
Dec 6, 2022題目:https://leetcode.com/problems/reverse-bits/ 描述:將32位元的unsigned int中的位元順序顛倒後回傳結果的值 解題思路:詳細解答來源,用分治法(divide and conquer)每次將處理範圍中左半與右半邊的位元值互換,對一個有2^n位元的數字總共只需要換n次即可 程式碼: public class Solution { // you need treat n as an unsigned value
Nov 30, 2022題目:https://leetcode.com/problems/insert-delete-getrandom-o1-duplicates-allowed/ 描述:實作RandomizedSet類別,其中的函式要能新增&刪除數字以及隨機回傳一個數字,所有函式的平均時間複雜度需要是O(1),存入的數字能夠重複出現 解題思路:與380題類似但這次需要處理重複元素,所以在HashMap中改用HashSet來儲存多個相同數字的位置,此外邏輯相同 程式碼: class RandomizedCollection { private List<Integer> set;
Nov 29, 2022or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up