---
# System prepended metadata

title: 2429. Minimize XOR
tags: [Leetcode, Bit Manipulation, Medium, Greedy]

---

# 2429. Minimize XOR
###### tags: `Leetcode` `Medium` `Bit Manipulation` `Greedy`
Link: https://leetcode.com/problems/minimize-xor/description/
## 思路
```Integer.toBinaryString(num1)```可以直接把一个数转成它的二进制字串
```Integer.parseInt(sb.toString(),2)```可以直接把二进制字串变成int
先数出num2里面有多少个1
如果算出num1的binary表达式
从前往后遍历num1如果当前位是1 并且cnt不是0(还有1可以用) 就先用1(先满足前面的才能minimize结果)
如果剩的还没遍历的位置=cnt 说明后面无论怎样都要用1塞满 就用1
## Code
```java=
class Solution {
    public int minimizeXor(int num1, int num2) {
        int cnt = Integer.bitCount(num2);
        String s1 = Integer.toBinaryString(num1);
        StringBuilder sb = new StringBuilder();
        if(cnt>s1.length()) return (1<<cnt)-1;
        for(int i=0; i<s1.length(); i++){
            if(s1.charAt(i)=='1' && cnt!=0){
                sb.append(1);
                cnt--;
            }
            else if(s1.length()-i==cnt && cnt!=0){
                sb.append(1);
                cnt--;
            }
            else sb.append(0);
        }
        return Integer.parseInt(sb.toString(),2);
    }
}
```