您的位置:首页 > 其它

LeetCode Reverse Bits

2015-10-23 16:02 218 查看
题目:

Reverse bits of a given 32 bits unsigned integer.

For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as00111001011110000010100101000000).

题意:

给定一个32位的无符号整数,然后将其二进制表示反转,然后输出翻转后的十进制表示。

题解:

一开始拿到这题,LZ还是想到采用一般暴力的解法,因为用Java,有一些天生的优势,因为Java有一些现成的接口可以调用,比如可以直接调用stringbuilder的reverse方法,用来反转一个字符串;然后也可以调用Integer的valueOf方法来直接进行二进制和十进制之间的转化。但是这里有一个问题,那就是因为在Java里,int类型只能表示31位的正整数,如果一旦出现大于这个最大正整数的数字出现,那么就会出现溢出的情况,也就是说是返回一个负数。这时,就得考虑用Long类型来进行转化。

public static int reverseBits(int n)
{
String binStr = Integer.toBinaryString(n);
int length = binStr.length();
//System.out.println(length);
StringBuilder sb = new StringBuilder();
for(int i = 0; i <= (31 - length); i++) //这里是用来填充前面缺少的0,因为要满足有32位
{
sb.append(0);
}
for(int i = 0; i < length; i++) //这里是用来将实际的给的数的二进制填充到后面几位,这样就构成了完整的32位数
{
sb.append(binStr.charAt(i));
}
//System.out.println(sb.toString());
sb.reverse(); //然后调用StringBuilder的reverse方法,直接进行反转
//System.out.println(sb.reverse());
String s = sb.toString();
//System.out.println(s);
//Long.valueOf(s,2).
//System.out.println(Long.valueOf(s,2).longValue()); //这里是经典,采用Long类型的valueOf(string,int)是转化成从二进制转化成十进制的方法,然后就是将返回的Long类型转化为int类型,这非常典型。
return (Long.valueOf(s,2).intValue()); //这时,返回的就是-2.
//return Integer.valueOf(s, 2);

//System.out.println(binStr);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: