LeetCode算法题-Reverse Bits(Java实现)

LeetCode --- 190. Reverse Bits 解题报告 Reverse bits of a given 32 bits unsigned integer. Example 1: Input: 00000010100101000001111010011100 Output: 00111001011110000010100101000000 Explanation: The input binary string 000000101001010... 阅读详情

这是悦乐书的第185次更新,第187篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第44题(顺位题号是190)。给定32位无符号整数,求它的反转位。例如:

输入:43261596

输出:964176192

说明:43261596以二进制表示为00000010100101000001111010011100,

964176192以二进制表示为00111001011110000010100101000000。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

既然是做位运算,那么依次将原数从左往右移动一位,取出移动的位判断是0还是1,然后加到反转的结果上,并且反转的结果是从右往左移动一位,循环控制的次数为32次,因为是32位整数。

其中涉及到左移、右移、与(&)运算,与(&)运算的规则是相同的位上均为1时结果为1,否则结果为0,而左移、右移的规则就是从右往左补0和从左往右补0了。

public int reverseBits(int n) {
    int result = 0;
    for (int i=0; i<32; i++) {
        if ((n & 1) == 1) {
            result = (result << 1) + 1;
        } else {
            result = result << 1;
        }
        n = n >> 1;
    }
    return result;
}

03 第二种解法

可以将上面的步骤再简化下,进入循环时,无论原数右移出来的位是0还是1,都需要结果值左移一位,对此我们可以进行或(|)运算操作。

先将结果值左移一位,然后计算n和1的与(&)运算结果,再将两数做或(|)运算,如果n和1的与(&)运算结果为1,那么结果值就加1,为0就加0。

或(|)运算的规则是当两边操作数的位有一边为1时,结果为1,否则为0。

public int reverseBits2(int n) {
    int result = 0;
    for (int i = 0; i < 32; i++) {
        result = (result << 1) | (n & 1);
        n >>= 1;
    }
    return result;
}

04 第三种解法

先将原数转为二进制字符串,再利用StringBuilder的reverse方法得到反转的二进制字符串,再将二进制字符串变为整数返回。

public int reverseBits3(int n) {
    String inputBinary = this.decimalToBinary(n);
    String reversedInputBinary = new StringBuilder(inputBinary).reverse().toString();
    return this.binaryToDecimal(reversedInputBinary);
}

private String decimalToBinary(int n) {
    StringBuilder sb = new StringBuilder();
    while (Integer.compareUnsigned(n, 0) > 0) {
        sb.append(Integer.remainderUnsigned(n, 2));
        n = Integer.divideUnsigned(n, 2);
    }
    while (sb.length() < 32) {
        sb.append('0');
    }
    return sb.reverse().toString();
}

private int binaryToDecimal(String str) {
    int res = 0;
    for (char c: str.toCharArray()) {
        res *= 2;
        res += c == '0' ? 0 : 1;
    }
    return res;
}

05 第四种解法

利用包装类Integer自带的方法,reverse()方法即可反转原数。

public int reverseBits4(int n) {
    return Integer.reverse(n);
}

06 小结

算法专题目前已连续日更超过一个月,算法题文章44+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

mysql数据库中使用存储过程带来的好处和示例(存储过程的概念、定义、作用等详解) MySQL的存储过程(Stored Procedure)是一组SQL语句集合。用户通过指定的存储过程名和参数来调用并执行它。存储过程可以在数据库中预编译并存储,这样它们可以被多次调用而无需重新编写或解析SQL语句。 存储过程将复杂的SQL逻辑封装在一个可重用的单元中。多次调用存储过程,而不需要重复编写相同的SQL代码。- 通过封装,可以隐藏复杂的SQL逻辑,只向用户或应用程序提供简单的接口。MySQL的存储过程和编程语言中的函数的原理和目标是一致的:封装可重用的代码逻辑并提高代码的可维护性和可重用性。 阅读详情

相关推荐

在运行opencv时出现的两个问题:AttributeError: module ‘cv2‘ has no attribute ‘gapi_wip_gst_GStreamerPipeline‘

解决了opencv的两个问题:由问题一引出 AttributeError: module 'cv2' has no attribute 'gapi_wip_gst_GStreamerPipeline' cv2.error:OpenCV(4.1.2)C:\projects\opencvpython\opencv\modules\highgui\src\window.cpp:717:error: (-2:Unspecified error) The function is not implemented...

hu_yinghui的博客 3278

java字符串反转(7种方法)

1、用stringBuffer或者stringBuilder自带的reverse方法 public static String reverseTestOne(String s) { return new StringBuffer(s).reverse().toString(); } 2、将字符串拆分为char数组 public static String reverseTestTwo(String s) { char[] charArray = s.

成都彭于晏 1万+

LTM4644 四通道并联 16A 输出配置:PCB 布局 3 要点与热仿真验证

本文详细解析了LTM4644四通道并联实现16A输出的PCB布局与热管理要点,包括电流路径对称性设计、热优化布局技巧和接地系统优化。通过实际工程案例,展示了如何确保电流均流、热分布均衡及长期可靠性,为FPGA、ASIC和服务器主板供电设计提供高效解决方案。

weixin_33314040的博客 399

回文串判断(string类:反转reverse)

2029-Palindromes _easy version Problem Description “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。 请写一个程序判断读入的字符串是否是“回文”。 Input 输入包含多个测试实例,输入数据的第一行是一个正整数n,表示测试实例的个数,后面紧跟着是n个字符串。 Output 如果一个字符串是回文串,则输出"yes",否则输出"no". Sample Input 4 level abcde noon haha Samp

Erya Programming learning 1657

Vector CANape的使用记录

开门见山,今天想和大家分享下CANape使用记录,分享原因是近日在分析一个客户现场软件问题时,需要用到CANape来实时的监测ECU中的变量,因为之前对CANape的认知比较浅薄,觉得标定工程师使用他就足够了,但是这次的经历让我觉得需要写点东西来记录自己学习并使用他的过程。 相信大家能够在网上找到很多关于如何使用CANape的文章,从新建Project到后面的数据的观测、保存以及回放等等。我个人也是这么学过来的,所以我不打算从那些方面着手去描述如何使用她,而是根据我的真实使用过程以及问题的抛出到如何解决来

2万+

【ORB-SLAM3】使用安卓手机的摄像头运行ORB3

使用安卓手机的摄像头运行ORB-SLAM3单目

caiqidong321的博客 4999

Java StringBuilder reverse()方法与示例

StringBuilder类reverse()方法 (StringBuilder Class reverse() method) reverse() method is available in java.lang package. reverse()方法在java.lang包中可用。 reverse() method is used to reverse this character sequ...

cumudi0723的博客 6066

Ubuntu升级遇到grub-efi-amd64-signed报错?3步搞定这个烦人的EFI目录问题

本文详细解析了Ubuntu系统升级时遇到的“grub-efi-amd64-signed”报错及“cannot find EFI directory”问题。通过剖析UEFI启动机制与EFI系统分区原理,提供了从诊断到修复的三步解决方案,帮助用户快速解决因EFI目录未挂载导致的升级中断,确保系统引导正常。

assembly8low的博客 585

字符串反转方法总结

字符串反转方法总结

m0_50083902的博客 227

仿真学习系列(三十八):Sigrity仿真之单端S参数提取

S 参数(Scattering Parameters)是高速信号分析中最基础也最常用的指标,能够全面表征走线、过孔、连接器等互连结构的高频行为。在 Sigrity PowerSI 中,Model Extraction 是最常用的 S 参数提取方式,适用于高速差分线、单端线、过孔、参考平面等各种拓扑结构。 本节将通过示例讲解如何在 PowerSI 中完成一次完整的 S 参数提取流程,包括:对象选择、端口设置、频率范围配置以及结果查看。掌握此方法后,即可对任意高速网络执行阻抗、插损、回损、串扰分析,为进一步的

案例文章,高速信号 838

YOLO26改进 - C2PSA | C2PSA融合CPIASA跨范式交互与对齐自注意力机制 : 交互对齐机制,提升小目标与遮挡目标判别力 | ACM MM2025

本文介绍了跨范式表征与对齐Transformer(CPRAformer)及其核心的跨范式交互与对齐自注意力机制(CPIA - SA),并阐述了其在YOLO26中的结合应用。传统图像去雨模型特征提取局限大,CPIA - SA通过协同“空间 - 通道”与“全局 - 局部”范式解决该问题,由SPC - SA、SPR - SA和AAFM子模块构成,经双路提取、动态过滤、空间细化、对齐融合四步工作。我们将相关代码引入指定目录,在`ultralytics/nn/tasks.py`中注册,配置`yolo26 - C2PS

魔改工程师的博客 666

reverse bits java_LeetCode算法题-Reverse Bits(Java实现)

这是悦乐书的第185次更新,第187篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第44题(顺位题号是190)。给定32位无符号整数,求它的反转位。例如:输入:43261596输出:964176192说明:43261596以二进制表示为00000010100101000001111010011100,964176192以二进制表示为00111001011110000010...

weixin_36073392的博客 230

老款 NUC 复活计划:装 Ubuntu 部署 OpenClaw 本地 AI

老款 NUC 变身本地 AI 服务器指南 本文详细介绍了如何将老旧华硕 NUC 设备改造为本地 AI 服务器。主要内容包括: 硬件评估:列出老款 NUC 的最低配置要求(i3 6代/8GB内存/256GB SSD),并提供兼容性检查命令和性能预期表 系统准备:指导备份数据、下载 Ubuntu 22.04 LTS 和制作启动盘的方法(Windows/Linux双平台) 安装流程:从 BIOS 设置到 Ubuntu 安装的完整步骤,包括推荐的分区方案 系统优化:禁用不必要的服务、内核参数调优、Swap 配置和

博客 7608

【LeetCode】-reverse-bits

通用解法:https://www.cnblogs.com/grandyang/p/4321355.html 高票回答:https://leetcode.com/problems/reverse-bits/discuss/54741/ 此篇文章讲了一下通用的解法。我主要是分析一下高票的那种解法: package algorithms; /** * @Author:Kevin * @Descri...

迎着晨曦,Keep Going 266

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

[LeetCode 190] Reverse Bits

题目链接:reverse-bits import java.util.Arrays; /** * Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in binary as 0000001010010100000111101

瓦尔登湖 4099

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【Leetcode】Reverse Bits

题目链接:https://leetcode.com/problems/reverse-bits/ 题目: Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in binary as 0000001010010100000111101001

业精于勤,荒于嬉 2358

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Leetcode之Reverse Bits

题目: Reverse bits of a given 32 bits unsigned integer. Example 1: Input: 00000010100101000001111010011100 Output: 00111001011110000010100101000000 Explanation: The input binary string 0000001010...

qq_35455503的博客 150

LeetCode-190. Reverse Bits [C++][Java]

Reverse bits of a given 32 bits unsigned integer.

贫道绝缘子的博客 209

(Java)leetcode-190 Reverse Bits

题目 【按位反转】 Reverse bits of a given 32 bits unsigned integer. Example 1: Input: 00000010100101000001111010011100 Output: 00111001011110000010100101000000 Explanation: The input binary string 00000010100...

不思量 376

闯关leetcode——190. Reverse Bits

这题就是要将二进制进行逆序。解法也很简单,就是逐位判断是否为1,然后使用“或”操作,将其放置到对应位置。我们不一定需要对32位都进行判断,只要其退位到0时,我们就可以终止探索。

方亮的专栏 1296

leetcode Reverse Bits

这个题目有点奇怪。要求输出一个32位的int。还是无符号的。我用java实在没想到怎么处理。所以就上网百度了一下。看到了别人的解法 题目链接 点击打开链接 大神的解法  大神的地址点击打开链接 public class Solution { // you need treat n as an unsigned value public int reve

bleuesprit的专栏 392

【LeetCode】Reverse Bits(颠倒二进制位)

这道题是LeetCode里的第190道题。 题目描述: 颠倒给定的 32 位无符号整数的二进制位。 示例 1: 输入: 00000010100101000001111010011100 输出: 00111001011110000010100101000000 解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596...

『诞生之时已至,以此修正万象』 206

LeetCode-Reverse Bits

LeetCode Java Reverse Bits

坟头草一米七五 201

Java [Leetcode 190]Reverse Bits

题目描述: everse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in binary as00000010100101000001111010011100), return 964176192 (represented in binary as0...

dkk37351的博客 184

LeetCode 190 Reverse Bits

LeetCode 190 Reverse Bits 问题来源LeetCode190 Reverse Bits 问题描述 Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in binary as 0000001010010100000111

yanqinghe123的专栏 235

(java)Reverse Bits

Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as 001110010

martinmateng的博客 445
上一篇: LeetCode算法题-Rotate Array(Java实现)
下一篇: LeetCode算法题-Number of 1 Bits(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值