C++零基础100题-翻转数字的最小翻转次数

121 阅读1分钟

题目链接: 2220. 转换数字的最少位翻转次数 - 力扣(LeetCode)

题目描述

image.png

解题思路

  1. 首先我们要得到两个数字之间不同的地方,然后我们要比较那些不同的地方。
  2. 定义一个函数叫做getCnt1Count 这个函数的作用是获取到两个数之间不同的地方
  3. 将两个数异或运算的结果返回函数。然后获取到这个传进来的数有多少个二进制的1.
  4. 二进制的1就是要翻转的地方,找到一个就将cnt++
  5. 将cnt返回回去

代码实现

class Solution {
    int getCnt1Count(int x){
        int cnt=0;
        while(x>0){
            x &= (x-1);
            cnt++;
        }
        return cnt;
    }
public:
    int minBitFlips(int start, int goal) {
        return getCnt1Count(start^goal);
    }
};