题目:(力扣第190题)
image.png
效果图:
image.png
思路:一开始看到这个题,是想着先用把输入的十进制数字转换成2进制,然后再把二进制转成字符串然后转换为数组,再将二进制数组倒着排列一下,然后再转为10进制。一开使用的Integer.toBinaryString()
,将十进制转为二进制,反转之后转为10进制发现输出不正确,然后断点检查发现十进制转成的2进制不是32位的,而是
10100101000001111010011100 ---- java使用Integer转
00000010100101000001111010011100 ---- 题目实例中的二进制
就是前面的0被省略了,那么反转过来的二进制数组肯定就会有变化,所以就只能想其他办法。然后就用了前面文章写到的整数反转中的方案三,取模除十累加。
十进制:ans = ans * 10 + n % 10; n = n / 10;
二进制:ans = ans * 2 + n % 2; n = n / 2;
乘以2 可以通过向左位移一位实现,
除以2 可以通过向右位移一位实现
算法思维:数学思维:取模、累加
public int reverseBits(int n) {
// 在此处写入代码
int res = 0;
for (int i = 0; i < 32; i++) {
res = (res << 1) + (n & 1);
n >>= 1;
}
return res;
}
网友评论