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);
}
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);
}
相关文章推荐
- [php]mail函数发送邮件
- Win10 Cortana小娜选项没有显示搜索框现象的原因和解决办法
- Struts2 OGNL使用详解(转)
- Android画板
- Android 05:点击事件的四种写法
- mysql根据身份证信息来获取用户属性信息
- 树的算法 已知二叉树的前序序列和中序序列求解树
- mysql去除内容中的换行和回车
- arm-linux-gcc 编译器的安装
- 安卓顶部tab导航栏的实现
- java实现文件及目录压缩
- 最新版Android Sdk版本和API版本对应
- ajax返回json格式 报500 Internal Server Error
- 错误集
- 定时任务(每5分钟执行一次各机房访问接口)
- 将博客搬至CSDN
- 单断言VS多断言
- [国嵌笔记][032][异常向量表]
- 简明 Vim 练级攻略(转)
- LeetCode[Math]----Pow(x, n)