LeetCode Reverse Bits

本文介绍了如何使用Java解决反转32位无符号整数二进制表示的问题,包括填充不足位数和利用StringBuilder反转字符串,最后通过Long.valueOf()方法实现从二进制到十进制的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

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);
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值