自己想的解题思路是先做XOR操作得到不同位的序列,然后统计其中1的个数。具体统计方法为,和1相与得到只保留了最后一位的中间结果,判断最后一位是否为1,若为1则说明有一个1,然后右移重复操作即可
class Solution {public: int hammingDistance(int x, int y) { int v_xor = x ^ y; int c = 0; int r = 0; cout << v_xor << endl; while(v_xor != 0){ r = v_xor & 1; if(r != 0){ c++; } v_xor /= 2; } return c; }};网上看到使用n & (n-1)可以直接去掉最右边的1,看起来方便很多,结果submit都是3ms,没变快orz。具体代码变为class Solution {public: int hammingDistance(int x, int y) { int v_xor = x ^ y; int c = 0; int r = 0; cout << v_xor << endl; while(v_xor != 0){ v_xor =v_xor &( v_xor-1); c++; } return c; }};
新闻热点
疑难解答
图片精选