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);
}
}
运行结果截图如下:

本文介绍了LeetCode第75场双周赛的一道题目——6033.转换数字的最少位翻转次数,提供了两种Java解法,分别是利用位运算和循环计数以及位操作之统计。通过位异或和位与运算,计算出将start转换成goal所需的最少位翻转次数。

被折叠的 条评论
为什么被折叠?



