diff --git a/leetcode/README.md b/leetcode/README.md index a60fc8e7..74a9e371 100644 --- a/leetcode/README.md +++ b/leetcode/README.md @@ -48,6 +48,7 @@ LeetCode |389|[Find the Difference](https://leetcode.com/problems/find-the-difference/) | [C](./src/389.c)|Easy| |404|[Sum of Left Leaves](https://leetcode.com/problems/sum-of-left-leaves/) | [C](./src/404.c)|Easy| |442|[Find All Duplicates in an Array](https://leetcode.com/problems/find-all-duplicates-in-an-array/) | [C](./src/442.c)|Medium| +|461|[Hamming Distance](https://leetcode.com/problems/hamming-distance/) | [C](./src/461.c) |Easy| |509|[Fibonacci Number](https://leetcode.com/problems/fibonacci-number/) | [C](./src/509.c)|Easy| |520|[Detect Capital](https://leetcode.com/problems/detect-capital/) | [C](./src/520.c)|Easy| |561|[Array Partition I](https://leetcode.com/problems/array-partition-i/) | [C](./src/561.c)|Easy| diff --git a/leetcode/src/461.c b/leetcode/src/461.c new file mode 100644 index 00000000..a3ac8f99 --- /dev/null +++ b/leetcode/src/461.c @@ -0,0 +1,12 @@ +int hammingDistance(int x, int y){ + int difference = x ^ y; //The XOR operator generates the bitwise difference in the binary representation of two numbers + //If bit in ith position of both numbers is same, bit in difference is 0, otherwise 1 + int TotalBits = sizeof(difference)*8; //total number of bits + int i, distance = 0; + for(i = 0; i < TotalBits; i++) { + if(difference & (UINT32_C(1) << i)) //if the bit on the ith position of 32 bit input is 1, then proceed + //Further note the use of UINT32_C to convert 1 to unsigned 32 bit int, as just 1 is treated as int which cannot be shifted left more than 30 times + distance += 1; + } + return distance; +} \ No newline at end of file