当前位置: 首页 > 后端技术 > Java

LeetCode-190-ReverseBinaryBits

时间:2023-04-01 18:34:50 Java

ReverseBinaryBits题目:反转一个给定的32位无符号整数的二进制位。提示:请注意,在某些语言中,例如Java,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为整数的内部二进制表示形式是相同的,无论它是有符号的还是无符号的。在Java中,编译器使用二进制补码表示有符号整数。因此,在上面的示例2中,输入表示有符号整数-3,输出表示有符号整数-1073741825。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:二元运算把n看成一个长度为32的二进制串,将n的每一位从低到高依次枚举,倒序相加到翻转结果result中。在代码实现中,每枚举一位,n就右移一位,这样当前n的最低位就是我们要枚举的位。当n为0时循环结束。需要注意的是,在某些语言(如Java)中,没有无符号整数类型,所以对n的右移操作应该使用逻辑右移。解释:参考网上的题解,原来的解法很笨。publicclassLeetCode_190{/***二元运算*把n看成一个长度为32的二进制串,从低到高枚举n的每一位,倒序相加到翻转结果result中。在代码实现中,*每枚举一次将n右移一位,使得当前n的最低位就是我们要枚举的位。当n为0时循环结束。需要注意的是*在某些语言(如Java)中没有无符号整数类型,所以对n的右移操作应该使用逻辑右移。**@paramn*@return*/publicstaticintreverseBits(intn){int结果=0;对于(inti=0;i<32&&n!=0;++i){结果|=(n&1)<<(31-i);n>>>=1;}返回结果;}publicstaticvoidmain(String[]args){intn=43261596;//测试用例,二进制表示:00000010100101000001111010011100System.out.println(Integer.toBinaryString(n));//反转后的二进制表示:00111001011110000010100101000000System.out.println(Integer.toBinaryString(reverseBits(n)));}}【每日留言】人生有裂缝,唯有阳光才能进来。路有坎坷,才干才能坚强。