【力扣面试】面试题 05.06. 整数转换
题目
整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。
示例1:
输入:A = 29 (或者0b11101), B = 15(或者0b01111)
输出:2
示例2:
输入:A = 1,B = 2
输出:2
提示:
A,B范围在[-2147483648, 2147483647]之间
解题思路
方法1::
1、利用Java的toBinaryString方法,将整数转换为二进制,再反转后存储在StringBuilder中,s1,s2;
2、使用两个指针,i,j分别指向s1,s2,进行比较,只要不同就res++,短的字符串先停下
3、最后再判断长的,剩下的有多少个为1的字符,res就加多少;
4、返回res
代码
class Solution {
public static int convertInteger(int A, int B) {
String s = Integer.toBinaryString(A);
StringBuilder s1 = new StringBuilder(s).reverse();
s = Integer.toBinaryString(B);
StringBuilder s2 = new StringBuilder(s).reverse();
int lena = s1.length();
int lenb = s2.length();
int res = 0;
int i, j;
for (i = 0, j = 0; i < lena && j < lenb; i++, j++) {
if (s1.charAt(i) != s2.charAt(j)) {
res++;
}
}
if (i == lena) {
while (j < lenb) {
if (s2.charAt(j) == '1') {
res++;
}
j++;
}
}
if (j == lenb) {
while (i < lena) {
if (s1.charAt(i) == '1') {
res++;
}
i++;
}
}
return res;
}
}
方法二:
异或,然后统计1的个数。
因为异或之后,就把相同的置为1了。最后剩下的1,就是各自不同的数据;
代码
class Solution {
public int convertInteger(int A, int B) {
return Integer.bitCount(A^B);
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-integer-lcci