LeetCode 第 342 題(Power of Four)
LeetCode 第 342 題(Power of Four)
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example:
Given num = 16, return true. Given num = 5, return false.Follow up: Could you solve it without loops/recursion?
題目很簡單, 判斷一個數是否是 4 的 N 次方。
難點在於後面的附加條件:不能用迴圈和遞迴。
首先先給個用遞迴的解法。
bool isPowerOfFour(int num)
{
if(num == 1) return true;
if(num <= 0) return false;
if(num & 0x03) return false;
return isPowerOfFour(num / 4);
}
然後再給一個用迴圈的解法:
bool isPowerOfFour(int num)
{
if(num < 0) return false;
do
{
if(num == 1) return true;
if(num & 3) return false;
num = num >> 2;
}while (num);
return false;
}
如果不用迴圈和遞迴,也是可以做的。比如窮舉所有 4 的 N 次方。雖然這個程式碼看起來很醜陋,但是確實也滿足題目的要求。
bool isPowerOfFour(int num)
{
switch(num)
{
case 0x01:
case 0x04:
case 0x10:
case 0x40:
case 0x100:
case 0x400:
case 0x1000:
case 0x4000:
case 0x10000:
case 0x40000:
case 0x100000:
case 0x400000:
case 0x1000000:
case 0x4000000:
case 0x10000000:
case 0x40000000:
return true;
default:
return false;
}
}
講了這麼多,該說說正題了。這個題目其實考察的是這麼一個小知識點。 一個數 num,如果是 2 的 N 次方,那麼有:
num & (num - 1) = 0
一個數 num 如果是 4 的 N 次方必然也是 2 的 N 次方。所以可以先判斷 num 是否是 2 的 N 次方。然後再將 2 的 N 次方中那些不是 4 的 N 次方的數去掉。因此就有了下面的程式碼。
bool isPowerOfFour(int num)
{
if(num <= 0) return false;
if(num & (num - 1)) return false; // 先判斷是否是 2 的 N 次方
if(num & 0x55555555) return true; // 再將不是 4 的 N 次方的數字去掉
return false;
}
相關文章
- 每天一道LeetCode--342. Power of FourLeetCode
- LeetCode 第 326 題 (Power of Three)LeetCode
- LeetCode 第 231 題 (Power of Two)LeetCode
- LeetCode-342-4的冪LeetCode
- Leetcode Power of TwoLeetCode
- 342
- Leetcode第1~10題LeetCode
- LeetCode題解第122題LeetCode
- LeetCode刷題之第701題LeetCode
- LeetCode 第 69 題 (Sqrt(x))LeetCode
- LeetCode 第 7 題(Reverse Integer)LeetCode
- LeetCode 第 343 題 (Integer Break)LeetCode
- LeetCode 第 66 題 (Plus One)LeetCode
- Leetcode 231 Power of TwoLeetCode
- Leetcode 326. Power of ThreeLeetCode
- LeetCode 第 50 題 (Pow(x, n))LeetCode
- LeetCode 第 9 題(Palindrome Number)LeetCode
- LeetCode 第 190 題 (Reverse Bits)LeetCode
- LeetCode 第 37 題 (Sudoku Solver)LeetCode
- LeetCode 第 65 題(Valid Number)LeetCode
- [leetcode 第 400 場周賽]題解LeetCode
- Leetcode 231. Power of TwoLeetCode
- 【OCP最新題庫解析(052)--題4】Which four are true about the tools used to?
- KMP演算法(Leetcode第28題)KMP演算法LeetCode
- leetcode的第9題:迴文數LeetCode
- LeetCode 第 191 題 (Number of 1 Bits)LeetCode
- LeetCode 第 338 題 (Counting Bits)LeetCode
- LeetCode 第 14 題(Longest Common Prefix)LeetCode
- 填空題回答(Power Query)
- 326. Power of Three--LeetCode RecordLeetCode
- Leetcode 第136場周賽解題報告LeetCode
- LeetCode 第 125 題 (Valid Palindrome)LeetCode
- LeetCode 第 21 題 (Merge Two Sorted Lists)LeetCode
- Four-bit binary counter
- LeetCode 第 86 號問題:分割連結串列LeetCode
- 每天一道LeetCode--326. Power of ThreeLeetCode
- LeetCode第 146 號問題: LRU 快取機制LeetCode快取
- 【LeetCode 231_整數_位運算】Power of TwoLeetCode