• Leetcode 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 。
    

    提示:

    • 0 <= start, goal <= 10^9

    Code:

    class Solution {
    public:
        string int2binarystring(int num)
        {
            string res;
            
            while(1)
            {
                res+=to_string(num%2);
                num=num/2;
                if(num==0)
                    break;
            }
            reverse(res.begin(),res.end());
            return res;
        }
        
        
        
        int minBitFlips(int start, int goal) {
            string str1=int2binarystring(start);
            string str2=int2binarystring(goal);
            
            cout<<str1<<" "<<str2<<endl;
            if(str1.length()>str2.length())
            {
                int diff=str1.length()-str2.length();
                
                for(int i=0;i<(diff);i++)
                    str2.insert(str2.begin(),'0');
            }
            else if(str1.length()<str2.length())
            {
                int diff=str2.length()-str1.length();
                
                for(int i=0;i<diff;i++)
                    str1.insert(str1.begin(),'0');
            }
            
            int res=0;
            for(int i=0;i<str1.length();i++)
            {
                if(str1[i]!=str2[i])
                {
                    res++;
                }
            }
            cout<<res<<endl;
            return res;
        }
        
    };
    
  • 相关阅读:
    ASP.NET Eval 求值运算的一些用法
    SQLSERVER中统计所有表的记录数
    一份很全的路由器默认初始密码集合
    将DataTable导出为excel
    如何强制修改mysql的root密码(mysql忘记密码)
    資料庫的安全(備份/回存)(console)
    ffserver和ffmpeg配合完成的实时流媒体服务
    mssql里sp_MSforeachtable和sp_MSforeachdb的用法
    ASP.NET中GridView中嵌套GridView
    How to update multiple columns of one table using values from another table?
  • 原文地址:https://www.cnblogs.com/xiaohai123/p/16373445.html
Copyright © 2020-2023  润新知