zoukankan      html  css  js  c++  java
  • LeetCode汉明距离Swift

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

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

    注意:
    0 ≤ x, y < 231.

    示例:

    输入: x = 1, y = 4
    
    输出: 2
    
    解释:
    1 (0 0 0 1)
    4 (0 1 0 0)
         ↑   ↑
    
    上面的箭头指出了对应二进制位不同的位置。

    思路一

    class Solution {
        func hammingDistance(_ x: Int, _ y: Int) -> Int {
            var n = x ^ y
            var count = 0
            while n != 0 {
                if ((n & 1) != 0) {
                    count += 1
                }
                n = n >> 1
            }
            return count 
        }
    }

    备注:

    1. n = 0001 ^ 0100 = 0101 = 5 , 求韩明距离改为求 二进制 n = 0101 中 1 的个数。
    2. 按位与,n & 1 , 每次可以获得 n 的最后一位。计数加一。将 n 右移,左边加0。循环
    3. n = 0 时,停止计数。

    思路二:效率更高一点

    class Solution {
        func hammingDistance(_ x: Int, _ y: Int) -> Int {
            var n = x ^ y
            var count = 0
            while n != 0 {
                count += 1
                n = n & (n - 1)
            }
            return count 
        }
    }

    备注:

    n = n & (n - 1)  一次去掉 n 最后的一个 1,例如 n = 1100 , n - 1 = 1011, n & (n - 1) = 1000

    思路三:nonzeroBitCount 函数就是 swift 中,int属性,变为二进制后非0个数

    class Solution {
        func hammingDistance(_ x: Int, _ y: Int) -> Int {
            var n = x ^ y
            return n.nonzeroBitCount 
        }
    }

    应用:

    汉明距离是以理查德·卫斯里·汉明的名字命名的。在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。图片相似度检测。百度谷歌以图搜图功能的实现。

  • 相关阅读:
    从yield关键字看IEnumerable和Collection的区别
    弹出框Fancybox使用详解
    几个不错的JQuery UI框架
    解决 IE6 position:fixed 固定定位问题
    autocomplete 应用(搜索提示框)
    HTML5 基础
    Cookie原理
    escape()、encodeURI()、encodeURIComponent()区别详解
    顶回Top
    移植mavlink协议到STM32详细教程
  • 原文地址:https://www.cnblogs.com/huangzs/p/14184158.html
Copyright © 2011-2022 走看看