• Leetcode 461


    前言

    刚才在看汉明距离,刚好那篇博文上附上了相关题目,刚好又是leetcode的,所以做了一下。

    两个字符串的汉明距离可以理解成:两个字符对应位字符不相同的数目。

    所以实现起来其实超简单~所以这道是--水题。

    题目

    https://leetcode.com/problems/hamming-distance/

    题意

    给出两个整数,计算这两个整数的汉明距离。

    (两个整数的汉明距离是整数二进制的对应位不相同的数目)

    Note:
    0 ≤ x, y < 231.

    Example 1:

    Input: x = 1, y = 4
    
    Output: 2
    
    Explanation:
    1   (0 0 0 1)
    4   (0 1 0 0)
           ↑   ↑
    
    The above arrows point to positions where the corresponding bits are different.
    

    思路

    直接用除二取整法得到对应的二进制。再进行二进制对比。

    唯一需要注意的地方是:两个整数大小不一致,对应的二进制位数不一样。

    一般做法可能是将短的补长,但是这样比较麻烦。

    目前我对位数长短比较问题的处理方案是:

    (1)假设x的二进制长度是a,y的二进制长度是y。

    (2)先保证小的数肯定在x,所以x对应的二进制串肯定是最短的。

    (3)在两两比较时,先执行a个位置的对比(x二进制的第1~a位,和y二进制的第b-a+1~b位进行比较),再执行y多出的位数与0进行比较。

    代码

    # include<stack>
    class Solution {//blog = http://www.cnblogs.com/toulanboy/
    public:
        char * getBinary(int key){
            char * binaNum = new char[33];
            stack<int>result;
            while(key){
                result.push(key%2);
                key /= 2;
            }
            int k=0;
            while(!result.empty()){
                binaNum[k++] = result.top() + '0';
                result.pop();
                
            }
            binaNum[k++] = '';
            return binaNum;
        }
        int hammingDistance(int x, int y) {
            if(x > y){
                int t = x;
                x = y;
                y = t;
                
            }
               
            char * binaNum_1 = getBinary(x);
            char * binaNum_2 = getBinary(y);
            int len1 = strlen(binaNum_1);
            int len2 = strlen(binaNum_2);
            int gap = len2-len1;
            
            int i, diff = 0;
            for(i=0; i<len1; ++i){
                if(binaNum_1[i] != binaNum_2[i+gap])
                    diff++;
            }
            for(i=0; i<gap; ++i){
                if(binaNum_2[i] != '0')
                    diff++;
            }
            return diff;
        }
    };
    

    运行结果

    Runtime: 4 ms, faster than 97.50% of C++ online submissions for Hamming Distance.
    Memory Usage: 8.7 MB, less than 99.64% of C++ online submissions for Hamming Distance.
    
  • 相关阅读:
    修改表结构
    enum/set 约束
    MYSQL 数据类型
    表和数据的基础操作
    存储引擎
    mysql
    HTML 介绍
    selor模块
    select
    协程
  • 原文地址:https://www.cnblogs.com/toulanboy/p/10863625.html
Copyright © 2020-2023  润新知