leetcode刷题五十三

Posted hhh江月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode刷题五十三相关的知识,希望对你有一定的参考价值。

leetcode刷题五十三

文章目录

题目链接


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

题目叙述

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。

给你两个整数 x 和 y,计算并返回它们之间的汉明距离。

题目思路

这道题目需要计算汉明距离,我们根据汉明距离的定义,最直接的想法就是首先求出来两个数字的二进制表达式,然后比较两个数字的二进制表达式,通过比较我们可以得出两个数字的二进制的表达式中不同的位置的个数,然后这个个数也就是我们所需要的最终的结果了,具体而言,计算一个数字(十进制)的二进制表达式的方法是通过不断的除以2,将所得到的余数组合起来就是十进制数字对应的二进制表达式;两个数字都可以使用这种方法来计算二级制的表达式,计算完毕以后需要对两个表达式进行比较,但是二进制的长短可能会有差别,因此在比较之前首先需要将二进制的长度补成一样的,如果两个长度一样的话就不需要补齐了,如果长短不一样,那么给长度比较短的那个二进制数字的高位补0就可以了;当两个二进制数字的长度一样之后我们就可以进行比较了,这里的比较只需要对比每一位上的数字是否相同就可以了,每次比较需要更新一下汉明距离,当所有的位置都比较了以后我们就得到了最终的汉明距离了。

以上就是大致的代码思路,仅供大家参考,如有错误还请大家多多指正。

题目解答javascript代码

/**
 * @param number x
 * @param number y
 * @return number
 */
var hammingDistance = function(x, y) 
    let arr1 = []
    let arr2 = []
    let n1 = x
    let n2 = y
    let num = 0


    if(n1 == 0)
        arr1.push(0)
    else
        if(n1 == 1)
            arr1.push(1)
        else
            while(n1 != 0 && n1 != 1)
                arr1.push(n1 % 2)
                n1 = (n1 - n1 % 2) / 2
            
            arr1.push(n1)
        
    
    // arr1.reverse()
    // console.log(arr1)


    if(n2 == 0)
        arr2.push(0)
    else
        if(n2 == 1)
            arr2.push(1)
        else
            while(n2 != 0 && n2 != 1)
                arr2.push(n2 % 2)
                n2 = (n2 - n2 % 2) / 2
            
            arr2.push(n2)
        
    
    // arr2.reverse()
    // console.log(arr2)


    let l1 = arr1.length
    let l2 = arr2.length
    // console.log(l1)
    // console.log(l2)


    if(l1 == l2)
        // console.log(arr1)
        // console.log(arr2)
        for(let i = 0;i < l1;i++)
            if(arr1[i] != arr2[i])
                num = num + 1
            else
                continue
            
        
    else
        if(l1 > l2)
            for(let j = 0;j < l1 - l2; j++)
                arr2.push(0)
            
            // console.log(arr1)
            // console.log(arr2)
            for(let i = 0;i < l1;i++)
                if(arr1[i] != arr2[i])
                    num = num + 1
                else
                    continue
                
            
        else
            for(let j = 0;j < l2 - l1; j++)
                arr1.push(0)
            
            // console.log(arr1)
            // console.log(arr2)
            for(let i = 0;i < l2;i++)
                if(arr1[i] != arr2[i])
                    num = num + 1
                else
                    continue
                
            
        
    


    return num
;


题目运行的结果

以上是关于leetcode刷题五十三的主要内容,如果未能解决你的问题,请参考以下文章

leetcode刷题五十三

leetcode刷题五十三

leetcode刷题五十四

leetcode刷题五十四

leetcode刷题五十四

leetcode刷题五十四