Skip to content

Commit 296ba46

Browse files
author
Kai Yang
committed
201 Bitwise AND of Numbers Range
1 parent 553fcf3 commit 296ba46

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

201.BitwiseAndOfNumbersRange.Test.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using System;
2+
using NUnit.Framework;
3+
4+
[TestFixture]
5+
public class TestClass : TestClassBase
6+
{
7+
[TestCase(100, 1000)]
8+
public void TestMethod(int maxDiff, int repeatTimes)
9+
{
10+
Repeat(repeatTimes, () =>
11+
{
12+
var m = Random.Next();
13+
var n = m + Math.Min(int.MaxValue - m, Random.Next(maxDiff));
14+
var expectedResult = RangeBitwiseAnd(m, n);
15+
var result = new Solution().RangeBitwiseAnd(m, n);
16+
Assert.AreEqual(expectedResult, result, "m: {0}. n: {1}.", m, n);
17+
});
18+
}
19+
20+
private int RangeBitwiseAnd(int m, int n) {
21+
var result = m;
22+
for (var i = m + 1; i <= n; ++i)
23+
{
24+
result &= i;
25+
}
26+
return result;
27+
}
28+
}

201.BitwiseAndOfNumbersRange.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
public class Solution {
2+
public int RangeBitwiseAnd(int m, int n) {
3+
var and = m & n;
4+
var xor = m ^ n;
5+
var temp = 0;
6+
while (xor > 0)
7+
{
8+
temp = (temp << 1) + 1;
9+
xor >>= 1;
10+
}
11+
return and & (~temp);
12+
}
13+
}

0 commit comments

Comments
 (0)