2220. 转换数字的最少位翻转次数
一次 位翻转 定义为将数字 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. 转换数字的最少位翻转次数相关推荐
- LeetCode 2220. 转换数字的最少位翻转次数(位运算)
文章目录 1. 题目 2. 解题 1. 题目 一次 位翻转 定义为将数字 x 二进制中的一个位进行 翻转 操作,即将 0 变成 1 ,或者将 1 变成 0 . 比方说,x = 7 ,二进制表示为 11 ...
- LeetCode 6033. 转换数字的最少位翻转次数(位运算)
文章目录 1. 题目 2. 解题 1. 题目 一次 位翻转 定义为将数字 x 二进制中的一个位进行 翻转 操作,即将 0 变成 1 ,或者将 1 变成 0 . 比方说,x = 7 ,二进制表示为 11 ...
- leetCode-995:K 连续位的最小翻转次数
题目描述: 在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0. 返回所需的 K 位翻转的最小 ...
- 2027. 转换字符串的最少操作次数
2027. 转换字符串的最少操作次数 给你一个字符串 s ,由 n 个字符组成,每个字符不是 'X' 就是 'O' . 一次 操作 定义为从 s 中选出 三个连续字符 并将选中的每个字符都转换为 'O ...
- LeetCode 995. K 连续位的最小翻转次数(差分思想)
文章目录 1. 题目 2. 解题 1. 题目 在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 ...
- Leetcode 第1342题:将数字变成 0 的操作次数 (位运算解题法详解)
前言 Leetcode第1342题如果用直观方式来做,其实是一道难度极低的题目.但是如果采用位运算的方式来解,则会涉及许多有趣的衍生知识点,了解其背后的原理对我们认识位运算有很大的帮助.现在,就让我们 ...
- LeetCode-995. K连续位的最小翻转次数(Minimum Number of K Consecutive Bit Flips)
K连续位的最小翻转次数 在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0. 返回所需的 K ...
- C++将数字A转换为数字B所需的翻转次数算法实现(附完整源码)
C++将数字A转换为数字B所需的翻转次数算法实现 C++将数字A转换为数字B所需的翻转次数算法实现完整源码(定义,实现,main函数测试) C++将数字A转换为数字B所需的翻转次数算法实现完整源码(定 ...
- leetcode 995. K 连续位的最小翻转次数(贪心算法)
在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0. 返回所需的 K 位翻转的最小次数,以便数 ...
最新文章
- 论信息系统的项目范围管理
- docker latest标签问题
- 1.1ASP.NET Web API 2入门
- Tomcat tomcat-users.xml详解
- 也发一个自定义分页控件
- springboot 使用的配置
- thinkphp mysql函数_thinkphp对数据库操作有哪些内置函数
- SQL Server 执行 字符串
- Eclipse项目无错误但是有红叉问题解决
- Cocos2d-x基础概念详情篇
- php调用海康人脸识别摄像机,海康网络摄像机SDK对接
- 微信公众号开发笔记(七)上传素材获取Media_id
- sublimit 编辑器扩展_视频字幕编辑工具-字幕编辑器(Subtitle Edit)下载v3.5.17 多语中文版-西西软件下载...
- 怎么改锁定计算机的背景,电脑修改登录界面背景壁纸的操作方法
- c++ 堆优化版dijkstra 代码实现
- 麦肯锡问题分析与解决技巧 - 高杉尚孝
- [Linux C编程]嵌入式数据库(二)
- java并发编程——并发编程的挑战
- 神经网络常用和不常用损失函数
- 全网下载量5w+,这本经典Python书强烈推荐!
热门文章
- 随想杂谈(06-06-30)
- 反射光和折射光偏振分析
- NCBI与其他网站基因转换
- 关于电脑关机之前没关梯子导致连不上校园网的问题
- linux安卓模拟器root,kali linux 安装高性能安卓模拟器Genymotion
- python有趣的例子和故事,Python几个有趣和特别的小故事|简明python教程|python入门|python教程...
- 微信小程序循环,每行固定数目,自动换行
- C语言东方博宜1667最大数最小数之差
- POC编写基础————1、基础知识
- Windows服务调用Office时,未将对象引用的实例