[LeetCode] 342. Power of Four(위치 작업)

852 단어
컨베이어 도어

Description


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의 멱수인지 아닌지를 구한다.
문제: 우리는 4의 幂次를 알고 있다. 그러면 그 2진법 위치는 하나밖에 없고 나머지는 모두 0이다. 그리고 규칙을 발견할 수 있다. 4의 0차 幂次부터 열거하면 지난 幂次에 비해 0을 사이에 두고 4의 幂次의 2진법 위치를 함께 써서 나타낼 수 있다.0101...형식이기 때문에num&(num-1)에 따라 2진법 위치가 하나밖에 없는지 판정한 다음에 16진법의 5555555와 비교하면 4의 멱차의 표현 형식이 있는지 판단할 수 있다. 왜냐하면 16진법의 5의 표현 형식은 바로 0101이기 때문이다.
 
class Solution {
public:
    //3ms
    bool isPowerOfFour(int num) {
        return !(num & (num - 1)) && (num & 0x55555555);
    }
};

좋은 웹페이지 즐겨찾기