两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
注意:
0 ≤ x, y < 231.
示例:
输入: x = 1, y = 4
输出: 2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
上面的箭头指出了对应二进制位不同的位置。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/hamming-distance
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
针对以上的题目,使用PHP实现了两种实现方法,但基本原来是一样的
class Solution {
/**
* @param Integer $x
* @param Integer $y
* @return Integer
*/
function hammingDistance($x, $y) {
// 第一种
$bin_x = decbin($x);
$bin_y = decbin($y);
$str_x = strrev((string)$bin_x);
$str_y = strrev((string)$bin_y);
$x_len = strlen($str_x);
$y_len = strlen($str_y);
$len = $x_len > $y_len ? $x_len : $y_len;
$num = 0;
for($i = 0; $i <= $len; $i++) {
$_x = isset($str_x[$i]) ? $str_x[$i] : 0;
$_y = isset($str_y[$i]) ? $str_y[$i] : 0;
if($_x != $_y) {
$num++;
}
}
return $num;
// 第二种
$bin_x = decbin($x);
$bin_y = decbin($y);
$str_x = (string)$bin_x;
$str_y = (string)$bin_y;
$x_len = strlen($str_x);
$y_len = strlen($str_y);
$len = $x_len > $y_len ? $x_len : $y_len;
if($x_len > $y_len) {
$str_y = str_pad($str_y, $len, "0", STR_PAD_LEFT);
}else {
$str_x = str_pad($str_x, $len, "0", STR_PAD_LEFT);
}
$num = 0;
for($i=0; $i < $len; $i++) {
$_x = isset($str_x[$i]) ? $str_x[$i] : 0;
$_y = isset($str_y[$i]) ? $str_y[$i] : 0;
if($_x != $_y) {
$num++;
}
}
return $num;
}
}
第一种解法是将字符串进行补全,然后进行一一对比;
第二种解法是将字符串翻转,然后进行一一对比;