190. Reverse Bits 颠倒二进制位

题目分析:将一个二进制的数颠倒过来,比如10010,输出01001。在写c++代码时,我把这个看作是十进制颠倒的原理,比如110,十进制情况下,每次%出最后一位然后相加。二进制,就只需要将% /的底数换成2就行。在python中,写同样的代码会有问题,python3中int位数不是固定32位,其实可以用fixedint模块,但是leetcode没有,所以就用同样的思想,一位位的取出来。

C++:

uint32_t reverseBits(uint32_t n) {
    uint32_t count = 0;
    int i;
    for(i = 0 ; i < 32 ; i++){
        count = count*2 + n%2;
        n /= 2;
    }
    return count;
}

python:

def reverseBits(self, n: int) -> int:
    count = 0
    for i in range(32):
        count <<= 1   #左移一位
        count += n & 1   #保留n最后一位加上去
        n >>= 1  #n右移一位
    return count

 

 

你可能感兴趣的:(LeetCode,经典题目)