Leetcode 461 汉明距离 & 338. 比特位计数

2022-01-03  本文已影响0人  itbird01
题目.png

题意:两个整数之间的 汉明距离指的是这两个数字对应二进制位不同的位置的数目。给你两个整数 xy,计算并返回它们之间的汉明距离。

解题思路

解法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;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读