天天看點

[LeetCode] 次幂判斷問題出處分析代碼

出處

3的幂

分析

找規律來解題,盡量不要有循環這類想法。參考: 如何快速判斷一個數是不是2的幂、3的幂、4的幂 的思路。

  • 2的次幂: 二進制位隻有一個1: 00000…..100000,減1後為 000000…..0111111。兩者相與則為0。是以 n & (n-1) == 0 即可。
  • 4的次幂:4^n = (2^2)^n,1僅在偶數進制位上,那與僅在奇數位上的二進制數與操作為0 即可。是以: n & (n-1) == 0 && n & 0x55555555 == 0。 其中 0x55555555 是十六進制數,轉為二進制數則是奇數位為1的二進制數。(1431655765 = 0x55555555 = 1010101010101010101010101010101)
  • 3的次幂:我們首先分析3的幂的特點,假設一個數Num是3的幂,那麼所有Num的約數都是3的幂,如果一個數n小于Num且是3的幂,那麼這個數n一定是Num的約數。即:3^Nmax % 3^num == 0。是以,是以算出3^Nmax即可。

代碼

public class IsPowerOfThree {
    public boolean isPowerOfThree(int n) {
        int maxPower = (int) Math.pow(,
            (int)(Math.log()/Math.log()));
        return maxPower % n == ;
    }
}
           

繼續閱讀