Leetcode 461 汉明距离 & 338. 比特位计数
2022-01-03 本文已影响0人
itbird01
题目.png
题意:两个整数之间的 汉明距离指的是这两个数字对应二进制位不同的位置的数目。给你两个整数
x
和y
,计算并返回它们之间的汉明距离。
解题思路
解法1:
1.x和y异或为k,相同为0,不同为1
2.将k循环与k-1与操作,每次按位与,相当于把k的最右边的1,置为0
解题遇到的问题
1.计算一个二进制中,1的个数,巧妙使用n&n-1的技巧
后续需要总结学习的知识点
无
##解法1
class Solution {
public int hammingDistance(int x, int y) {
int k = x ^ y; // 异或,相同为0,不同为1
int ans = 0;
while (k != 0) {
k = k & (k - 1); // 每次按位与,相当于把k的最右边的1,置为0
ans++;
}
return ans;
}
}
题目.png
题意:给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。
解题思路
解法1:
1.计算一个二进制中,1的个数,巧妙使用n&n-1的技巧
解题遇到的问题
1.无
后续需要总结学习的知识点
无
##解法1
class Solution {
public int[] countBits(int n) {
int[] ans = new int[n + 1];
for (int i = 0; i < ans.length; i++) {
int k = i;
int count = 0;
while (k != 0) {
k &= (k - 1);
count++;
}
ans[i] = count;
}
return ans;
}
}