linye's Blog

全端工程師心得分享

0%

[LeetCode]326. Power Of Three

敘述

寫每日練習

  • 難度: Easy
  • 花費時間: 5 min
  • 題目
點我開啟限制與範例

限制:

  • -231 <= n <= 231 - 1

Example 1:

1
2
Input: n = 27
Output: true

Example 2:

1
2
Input: n = 0
Output: false

Example 3:

1
2
Input: n = 9
Output: true

筆記

題目的需求很簡單,所以有多種做法可以完成。

1. 迴圈作法(直覺)

直覺上來說,怎麼做怎麼來。

javascript

1
2
3
4
5
6
7
8
9
10
11
12
var isPowerOfThree = function (n) {
// 例外處理
if (n < 1) return false;

// 如果 n 可以被 3 整除,那就除下去
while (n % 3 == 0) {
n /= 3;
}

// 最後除完,看看有沒有等於 1 ,如果等於 1 那就代表成立
return n == 1;
};

2. 數學作法

n = 3^i
i = log3(n)
i = log10(n)/log10(3)

按照上面的邏輯,檢查 n 有沒有符合即可。

javascript

1
2
3
var isPowerOfThree = function (n) {
return ((Math.log10(n) / Math.log10(3)) % 1 == 0);
};

3. 數學作法(特殊)

上評論區看到的,直接拿題目裡最大的 power of 3 跟 n 取餘數檢查。

非常的簡潔,且是最佳的做法

java

1
2
3
4
public boolean isPowerOfThree(int n) {
// 1162261467 is 3^19, 3^20 is bigger than int
return (n > 0 && 1162261467 % n == 0);
}

成績

點我開啟舊寫法/失敗寫法