经典面试题(三十八)-- 整数转换

发布于 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}



以上仅是个人思路解法,觉得还不错欢迎点赞分享


往期精彩推荐

  • 二叉树(八)--翻转二叉树

  • 经典面试题(十五)--水壶问题

  • 二叉树(七)--合并二叉树


点击下方链接,gongzhong号,更多精彩等你发现



相关资源