首页 > 其他分享 >LeetCode 2220.转换数字的最少位翻转次数

LeetCode 2220.转换数字的最少位翻转次数

时间:2024-04-08 13:32:42浏览次数:15  
标签:右移 index start int 2220 二进制位 result LeetCode 翻转

一、题目

二、知识点

符号

描述

运算规则

&

两位都为1结果为1

|

两位都为0结果为0

^

异或

两位相同为0不同为1

~

取反(非)

0变1,1变0

<<

左移

二进制位全部左移,高位丢弃,低位补0

>>

右移

二进制位全部右移,低位丢弃,高位补符号位

>>>

无符号右移

二进制位全部右移,低位丢弃,高位补0

  • 左移和右移可以做乘除运算,例如除2可以右移一位。
  • 右移和无符号右移的区别在于负数的时候不一样,>>负数的时候高位补1,>>>负数的时候高位补0。

三、解题

注:本文均是Java代码

1、方案一

class Solution {
    public int minBitFlips(int start, int goal) {
        // 二进制位有多少个不同 
        int result= 0;
        int index = start ^ goal;    // 相同为0,不同为1
        // 计算变量中有多少个不同(即1),不同的个数就是最少翻转次数
        while (index > 0) {    // 一旦变量值等于0,后边不会有不同
            result += index & 1;    // 判断最后一位是0还是1,是什么就加什么
            index = index >> 1;    // 右移一位
        }
        return result;
    }
}

2、方案二

class Solution {
    public int minBitFlips(int start, int goal) {
        // 二进制位有多少个不同 
        int result = 0;
        for (int i = 0; i < 32; i++) {
            // 判断第i位是0还是1
            // int x = (start & (1 << i)) == 0 ? 0 : 1;
            // int y = (goal & (1 << i)) == 0 ? 0 : 1;
            // 可以不用三元运算符比较是0还是1,直接比就行(比的就是这一位上是什么)
            int x = start & (1 << i);
            int y = goal & (1 << i);
            if (x != y) result++;
        }   
        return result;     
    }
}

3、说明

无论采用哪种方案,归根结底都是通过位运算找到有多少个不同的位。

标签:右移,index,start,int,2220,二进制位,result,LeetCode,翻转
From: https://blog.csdn.net/qq_63939626/article/details/137352723

相关文章

  • 【LeetCode刷题记录】15. 三数之和
    15三数之和给你一个整数数组nums,判断是否存在三元组[nums[......
  • Leetcode 2894. 分类求和并作差
    https://leetcode.cn/problems/divisible-and-non-divisible-sums-difference/submissions/521201434/给你两个正整数n和m。现定义两个整数num1和num2,如下所示:num1:范围[1,n]内所有无法被m整除的整数之和。num2:范围[1,n]内所有能够被m整除的整数之和。......
  • LeetCode刷题记录——day10
    1、https://leetcode.cn/problems/rotate-image/description/?envType=study-plan-v2&envId=2024-spring-sprint-100classSolution{public:voidrotate(vector<vector<int>>&matrix){intn=matrix.size();for(inti=0;......
  • LeetCode题练习与总结:插入区间--57
    一、题目描述示例 1:输入:intervals=[[1,3],[6,9]],newInterval=[2,5]输出:[[1,5],[6,9]]示例2:输入:intervals=[[1,2],[3,5],[6,7],[8,10],[12,16]],newInterval=[4,8]输出:[[1,2],[3,10],[12,16]]解释:这是因为新的区间[4,8]与[3,5],[6,7],[8,10] 重叠。......
  • LeetCode题练习与总结:最后一个单词的长度--58
    一、题目描述给你一个字符串s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。示例1:输入:s="HelloWorld"输出:5解释:最后一个单词是“World”,长度为5。示例2:输入:s="......
  • 批量图片翻转、裁剪
    【Python】Windows环境-Python批量图片翻转、裁剪WindowsVsCode搭建Python环境注意事项python不要安装在含有中文的路径里修改pip源(PowerShell里)a.更新pip>python-mpipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simple--upgradepipb.设置pip源(清华大学......
  • Leetcode 866. 回文质数
    https://leetcode.cn/problems/prime-palindrome/description/给你一个整数n,返回大于或等于n的最小回文质数。一个整数如果恰好有两个除数:1和它本身,那么它是质数。注意,1不是质数。例如,2、3、5、7、11和13都是质数。一个整数如果从左向右读和从右向左读是相同的,那......
  • 从数组创建二叉树-Leetcode测试用
    Leetcode里和二叉树相关的题目,都是用一个数组表示二叉树的,而这个数组是按照层次优先顺序给出的,连其中的空结点也表示了出来,刚好就是2^N-1个结点,N表示层数。但数组毕竟无法和二叉树一样具有链式结构,无法进行算法测试,因此尝试直接通过这样的数组构建二叉树。通过数组创建这样的二......
  • LeetCode 面试经典150题---002
    ###169.多数元素给定一个大小为n的数组nums,返回其中的多数元素。多数元素是指在数组中出现次数大于⌊n/2⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。n==nums.length1<=n<=5*104-109<=nums[i]<=109这题可太有意思了,意思就是找......
  • LeetCode 2468. Split Message Based on Limit
    原题链接在这里:https://leetcode.com/problems/split-message-based-on-limit/description/题目:Youaregivenastring, message,andapositiveinteger, limit.Youmust split message intooneormore parts basedon limit.Eachresultingpartshouldhaveth......