3226. Number of Bit Changes to Make Two Integers Equal
You are given two positive integers n
and k
.
You can choose any bit in the binary representation of n
that is equal to 1 and change it to 0.
Return the number of changes needed to make n
equal to k
. If it is impossible, return -1.
Example 1:
Input: n = 13, k = 4
Output: 2
Explanation:
Initially, the binary representations of n
and k
are n = (1101)2
and k = (0100)2
.
We can change the first and fourth bits of n
. The resulting integer is n = (**0**10**0**)2 = k
.
Example 2:
Input: n = 21, k = 21
Output: 0
Explanation:
n
and k
are already equal, so no changes are needed.
Example 3:
Input: n = 14, k = 13
Output: -1
Explanation:
It is not possible to make n
equal to k
.
Constraints:
1 <= n, k <= 106
Solution:
class Solution {
public int minChanges(int n, int k) {
int result = 0;
String s = Integer.toBinaryString(n);
String s2 = Integer.toBinaryString(k);
int s2len = s2.length();
int slen = s.length();
if (s2len > slen){
return -1;
}
int count = Math.min(s2.length(), s.length());
while(count > 0){
if (s.charAt(slen -1) != (s2.charAt(s2len-1))){
if (s.charAt(slen-1) == '1'){
result++;
}else{
return -1;
}
}
s2len--;
slen--;
count--;
}
if (s.length() > s2.length()){
for (int i = 0; i < s.length() - s2.length(); i++){
if (s.charAt(i) == '1'){
result++;
}
}
}
return result;
}
}
//TC: O(n)
//SC: O(1)