经典面试题(三十八)-- 整数转换
发布于 2021-09-07 10:27 ,所属分类:2021面试经验技巧分享
来源:LeetCode
难度:简单
描述:
整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B
示例1:
输入:A = 29 (或者0b11101), B = 15(或者0b01111)
输出:2
示例2:
输入:A = 1,B = 2
输出:2
分析:
要知道改变几个位才能将A转换为B,那么首先得知道A和B之间有哪几位不一样,只要先找出这些不一样的元素,挨个转换即可。本题利用二进制中的位运算解题
解题
方法一:异或法
思路:
利用异或特性:相同为0,不同为1。将整数A和B进行异或,然后对得到的结果进行挨个判断,记录二进制中1的个数,有几个1就是需要转换几次
代码:
1publicintconvertInteger(intA,intB){
2intxor=A^B;
3intans=0;
4while(xor!=0){
5//temp&(temp-1)可以把temp最右边的1置0,其余位不变
6//这样,这个操作执行了几次,就是有几位要转换
7xor=(xor&xor-1);
8ans++;
9}
10returnans;
11}
以上仅是个人思路解法,觉得还不错欢迎点赞分享
往期精彩推荐
二叉树(八)--翻转二叉树
经典面试题(十五)--水壶问题
二叉树(七)--合并二叉树
相关资源