自己想的解題思路是先做XOR操作得到不同位的序列,然后統(tǒng)計其中1的個數(shù)。具體統(tǒng)計方法為,和1相與得到只保留了最后一位的中間結(jié)果,判斷最后一位是否為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; }};網(wǎng)上看到使用n & (n-1)可以直接去掉最右邊的1,看起來方便很多,結(jié)果submit都是3ms,沒變快orz。具體代碼變?yōu)?p>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; }};
新聞熱點
疑難解答
圖片精選