两个二进制中不同位的个数
来源:互联网 发布:相册网站设计源码 编辑:程序博客网 时间:2024/05/27 14:15
今天在牛客网刷题,现在要写的这题(2015年小米暑期实习面试题)其实蛮简单的,可是因为自己编写的经验不够,所以用了比较蠢的法子,后来看到他人公布的解法觉得眼前一亮。所以要记下来。
题目要求:
我的解法是,用Integer类里的方法把十进制转换成二进制,将得到的二进制String转换成char数组,再从后往前比较,比较至短字符串的开始处,再对较长的字符串前面的1进行统计。真的是很复杂,如下所示:
public static int countBitDiff(int m, int n) {String sm=Integer.toBinaryString(m);String sn=Integer.toBinaryString(n);char[] cm=sm.toCharArray();char[] cn=sn.toCharArray();int len=Math.min(cm.length, cn.length);int cha=Math.abs(sm.length()-sn.length());int counter=0;if (cm.length<cn.length) {for (int i = len-1; i >-1; i--) {if (cm[i]!=cn[i+cha]) {counter++;}}}else {for (int i = len-1; i >-1; i--) {if (cn[i]!=cm[i+cha]) {counter++;}}}String sub="";if (sm.length()>sn.length()) {sub=sm.substring(0,cha);}else {sub=sn.substring(0,cha);}char[] csub=sub.toCharArray();for (int i = 0; i < csub.length; i++) {if (csub[i]=='1') {counter++;}}return counter; }我提交通过之后,看到了别人的思路,是先异或,才反应过来,是的,本来就是求不同,直接用异或,然后再求异或后的数的1的个数就好了。昨天的那道题正好就是求一个数中1的个数的。
所以可以用一句话解决这个问题,如下:
return Integer.bitCount(m^n);就是这样。霍霍。
0 0
- 两个二进制中不同位的个数
- 两个二进制整数二进制不同位个数
- 【算法】求两个数中,bit位不同的个数
- 求二进制序列中1的个数及奇偶序列+输出整数的每一位+两个数中多少个bit位不同
- 两个数不同的位个数
- 【C】写一个宏将一个数字的奇数位和偶数位交换。实现两个int(32位)整数m和n的二进制表达中,位(bit)不同的个数
- 位运算:二进制中1的个数
- 二进制中1的个数----位运算
- 位运算------二进制中1的个数
- 求两个整型二进制中有多少个不同位
- 求两个数的二进制中有多少个不同的bit位
- 两个int数m和n的二进制表达式中有多少位不同?
- 【c语言】求两个数中不同的位的个数
- 【C语言】求两个数中不同的位的个数
- Pace 6 (1.写一个函数返回参数二进制中 1 的个数;2..获取一个数二进制序列中所有的偶数位和奇数位;3. 输出一个整数的每一位;4.两个int整数的二进制表达中,有多少个位不同
- 求出两个int(32位)整数m和n的二进制表达中,有多少bit位不同
- C语言实现两个int(32位)整数m和n的二进制表达中找不同位
- 计算两个整数的二进制中有几个二进制不同
- 学习jQuery选择器
- git clone WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- 联合 枚举 双指针 万能指针void*
- vs2010中文旗舰版,vs2013,vs2015企业版激活秘钥
- synchronized 对象锁
- 两个二进制中不同位的个数
- JS: 如何计算一个月有多少天
- c 差缺补漏
- runtime运行时
- maven资料合集
- Spring Data Redis
- fopen参数汇总
- python中的os.path模块
- 获取文件编码chardet