Leetcode第 75 场双周赛-6033. 转换数字的最少位翻转次数 ——双百题解
minBitFlips
一、解题思路
1、解法一( Java )
解法思路:位运算 + 循环计数
异或运算后循环计数位值是 1
的个数即可
^异或
位运算符
当相对应位值不同,则结果为 1
,否则为 0
&与
位运算符
如果相对应位都是 1
,则结果为 1
,否则为 0
伪代码如下:
/**
* @author Listen 1024
* @description Leetcode第 75 场双周赛-6033. 转换数字的最少位翻转次数 ——双百题解
* @date 2022-04-02 23:00
*/
class Solution {
public int minBitFlips(int start, int goal) {
int resNum = 0;
int ans = start ^ goal;
String res = Integer.toBinaryString(ans);
System.out.println(res);
for (int i = 0; i < res.length(); i++) {
if (res.charAt(i) == '1') {
resNum++;
}
}
return resNum;
}
}
优化后代码如下:
/**
* @author Listen 1024
* @description Leetcode第 75 场双周赛-6033. 转换数字的最少位翻转次数 ——双百题解
* @date 2022-04-02 23:00
*/
class Solution {
public int minBitFlips(int start, int goal) {
int temp = start ^ goal;
int res = 0;
while (temp > 0) {
if ((temp & 1) == 1) {
res++;
}
temp >>= 1;
}
return res;
}
}
1、解法二( Java )
解法思路:位操作之统计(秒杀)
bitCount(int i)
位操作之统计
获取 i
的值中二进制是 1
的个数
伪代码如下:
/**
* @author Listen 1024
* @description Leetcode第 75 场双周赛-6033. 转换数字的最少位翻转次数 ——双百题解
* @date 2022-04-02 23:00
*/
class Solution {
public int minBitFlips(int start, int goal) {
return Integer.bitCount(start ^ goal);
}
}
运行结果截图如下: