题目分析:将一个二进制的数颠倒过来,比如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
本文介绍了一种用于翻转二进制数的算法,分别使用C++和Python实现。核心思想是从输入的二进制数末尾开始逐位读取并重新构造新的二进制数。C++代码通过循环遍历32位,而Python则采用按位操作实现。
2819

被折叠的 条评论
为什么被折叠?



