一次 位翻转 定义为将数字 x 二进制中的一个位进行 翻转 操作,即将 0 变成 1 ,或者将 1 变成 0 。

比方说,x = 7 ,二进制表示为 111 ,我们可以选择任意一个位(包含没有显示的前导 0 )并进行翻转。比方说我们可以翻转最右边一位得到 110 ,或者翻转右边起第二位得到 101 ,或者翻转右边起第五位(这一位是前导 0 )得到 10111 等等。
给你两个整数 start 和 goal ,请你返回将 start 转变成 goal 的 最少位翻转 次数。

示例 1:

输入:start = 10, goal = 7
输出:3
解释:10 和 7 的二进制表示分别为 1010 和 0111 。我们可以通过 3 步将 10 转变成 7 :
- 翻转右边起第一位得到:1010 -> 1011 。
- 翻转右边起第三位:1011 -> 1111 。
- 翻转右边起第四位:1111 -> 0111 。
我们无法在 3 步内将 10 转变成 7 。所以我们返回 3 。

示例 2:

输入:start = 3, goal = 4
输出:3
解释:3 和 4 的二进制表示分别为 011 和 100 。我们可以通过 3 步将 3 转变成 4 :
- 翻转右边起第一位:011 -> 010 。
- 翻转右边起第二位:010 -> 000 。
- 翻转右边起第三位:000 -> 100 。
我们无法在 3 步内将 3 变成 4 。所以我们返回 3 。
10的二进制是1010
7的二进制是0111我们可以发现这道题目的规律,其所求的最少位翻转次数就为两个数有多少个不用的位数
如 :
1010
0111
有3为不同的位数我们可以使用10^7得到1101 再使用 位与(&)与其进行一一比较
11011  res+=1向右移位1
01101  res=1  这里0&1=0 不加1
向右移位100111  res+=1
向右移位100011  res+=1向右移位1
0000 结束  res = 3

提示:

0 <= start, goal <= 109

完整代码

class Solution {public:int minBitFlips(int start, int goal) {int res = 0;int tmp = start^goal;while(tmp){res+=tmp&1;//位与(&)需要将tmp转换为二进制与进行一一对比tmp = tmp>>1;//右移后赋值 tmp>>=1}return res;}
};

2220. 转换数字的最少位翻转次数相关推荐

  1. LeetCode 2220. 转换数字的最少位翻转次数(位运算)

    文章目录 1. 题目 2. 解题 1. 题目 一次 位翻转 定义为将数字 x 二进制中的一个位进行 翻转 操作,即将 0 变成 1 ,或者将 1 变成 0 . 比方说,x = 7 ,二进制表示为 11 ...

  2. LeetCode 6033. 转换数字的最少位翻转次数(位运算)

    文章目录 1. 题目 2. 解题 1. 题目 一次 位翻转 定义为将数字 x 二进制中的一个位进行 翻转 操作,即将 0 变成 1 ,或者将 1 变成 0 . 比方说,x = 7 ,二进制表示为 11 ...

  3. leetCode-995:K 连续位的最小翻转次数

    题目描述: 在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0. 返回所需的 K 位翻转的最小 ...

  4. 2027. 转换字符串的最少操作次数

    2027. 转换字符串的最少操作次数 给你一个字符串 s ,由 n 个字符组成,每个字符不是 'X' 就是 'O' . 一次 操作 定义为从 s 中选出 三个连续字符 并将选中的每个字符都转换为 'O ...

  5. LeetCode 995. K 连续位的最小翻转次数(差分思想)

    文章目录 1. 题目 2. 解题 1. 题目 在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 ...

  6. Leetcode 第1342题:将数字变成 0 的操作次数 (位运算解题法详解)

    前言 Leetcode第1342题如果用直观方式来做,其实是一道难度极低的题目.但是如果采用位运算的方式来解,则会涉及许多有趣的衍生知识点,了解其背后的原理对我们认识位运算有很大的帮助.现在,就让我们 ...

  7. LeetCode-995. K连续位的最小翻转次数(Minimum Number of K Consecutive Bit Flips)

    K连续位的最小翻转次数 在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0. 返回所需的 K ...

  8. C++将数字A转换为数字B所需的翻转次数算法实现(附完整源码)

    C++将数字A转换为数字B所需的翻转次数算法实现 C++将数字A转换为数字B所需的翻转次数算法实现完整源码(定义,实现,main函数测试) C++将数字A转换为数字B所需的翻转次数算法实现完整源码(定 ...

  9. leetcode 995. K 连续位的最小翻转次数(贪心算法)

    在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0. 返回所需的 K 位翻转的最小次数,以便数 ...

最新文章

  1. 论信息系统的项目范围管理
  2. docker latest标签问题
  3. 1.1ASP.NET Web API 2入门
  4. Tomcat tomcat-users.xml详解
  5. 也发一个自定义分页控件
  6. springboot 使用的配置
  7. thinkphp mysql函数_thinkphp对数据库操作有哪些内置函数
  8. SQL Server 执行 字符串
  9. Eclipse项目无错误但是有红叉问题解决
  10. Cocos2d-x基础概念详情篇
  11. php调用海康人脸识别摄像机,海康网络摄像机SDK对接
  12. 微信公众号开发笔记(七)上传素材获取Media_id
  13. sublimit 编辑器扩展_视频字幕编辑工具-字幕编辑器(Subtitle Edit)下载v3.5.17 多语中文版-西西软件下载...
  14. 怎么改锁定计算机的背景,电脑修改登录界面背景壁纸的操作方法
  15. c++ 堆优化版dijkstra 代码实现
  16. 麦肯锡问题分析与解决技巧 - 高杉尚孝
  17. [Linux C编程]嵌入式数据库(二)
  18. java并发编程——并发编程的挑战
  19. 神经网络常用和不常用损失函数
  20. 全网下载量5w+,这本经典Python书强烈推荐!

热门文章

  1. 随想杂谈(06-06-30)
  2. 反射光和折射光偏振分析
  3. NCBI与其他网站基因转换
  4. 关于电脑关机之前没关梯子导致连不上校园网的问题
  5. linux安卓模拟器root,kali linux 安装高性能安卓模拟器Genymotion
  6. python有趣的例子和故事,Python几个有趣和特别的小故事|简明python教程|python入门|python教程...
  7. 微信小程序循环,每行固定数目,自动换行
  8. C语言东方博宜1667最大数最小数之差
  9. POC编写基础————1、基础知识
  10. Windows服务调用Office时,未将对象引用的实例