Leetcode第 75 场双周赛-6033. 转换数字的最少位翻转次数 ——双百题解

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

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);
    }
}

运行结果截图如下:
运行结果截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值