Skip to content

Commit 2c432cc

Browse files
committed
feat: add solutions to lc problem: No.0201
No.0201.Bitwise AND of Numbers Range
1 parent 419b362 commit 2c432cc

File tree

8 files changed

+136
-15
lines changed

8 files changed

+136
-15
lines changed

solution/0200-0299/0201.Bitwise AND of Numbers Range/README.md

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,22 +43,74 @@
4343

4444
<!-- 这里可写通用的实现逻辑 -->
4545

46+
**方法一:位运算**
47+
48+
题目可以转换为求数字的公共二进制前缀。
49+
4650
<!-- tabs:start -->
4751

4852
### **Python3**
4953

5054
<!-- 这里可写当前语言的特殊实现逻辑 -->
5155

5256
```python
53-
57+
class Solution:
58+
def rangeBitwiseAnd(self, left: int, right: int) -> int:
59+
while left < right:
60+
right &= (right - 1)
61+
return right
5462
```
5563

5664
### **Java**
5765

5866
<!-- 这里可写当前语言的特殊实现逻辑 -->
5967

6068
```java
69+
class Solution {
70+
public int rangeBitwiseAnd(int left, int right) {
71+
while (left < right) {
72+
right &= (right - 1);
73+
}
74+
return right;
75+
}
76+
}
77+
```
78+
79+
### **C++**
80+
81+
```cpp
82+
class Solution {
83+
public:
84+
int rangeBitwiseAnd(int left, int right) {
85+
while (left < right) right &= (right - 1);
86+
return right;
87+
}
88+
};
89+
```
90+
91+
### **Go**
92+
93+
```go
94+
func rangeBitwiseAnd(left int, right int) int {
95+
for left < right {
96+
right &= (right - 1)
97+
}
98+
return right
99+
}
100+
```
61101

102+
### **C#**
103+
104+
```cs
105+
public class Solution {
106+
public int RangeBitwiseAnd(int left, int right) {
107+
while (left < right)
108+
{
109+
right &= (right - 1);
110+
}
111+
return right;
112+
}
113+
}
62114
```
63115

64116
### **...**

solution/0200-0299/0201.Bitwise AND of Numbers Range/README_EN.md

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,61 @@
4242
### **Python3**
4343

4444
```python
45-
45+
class Solution:
46+
def rangeBitwiseAnd(self, left: int, right: int) -> int:
47+
while left < right:
48+
right &= (right - 1)
49+
return right
4650
```
4751

4852
### **Java**
4953

5054
```java
55+
class Solution {
56+
public int rangeBitwiseAnd(int left, int right) {
57+
while (left < right) {
58+
right &= (right - 1);
59+
}
60+
return right;
61+
}
62+
}
63+
```
64+
65+
### **C++**
66+
67+
```cpp
68+
class Solution {
69+
public:
70+
int rangeBitwiseAnd(int left, int right) {
71+
while (left < right) right &= (right - 1);
72+
return right;
73+
}
74+
};
75+
```
76+
77+
### **Go**
78+
79+
```go
80+
func rangeBitwiseAnd(left int, right int) int {
81+
for left < right {
82+
right &= (right - 1)
83+
}
84+
return right
85+
}
86+
```
5187

88+
### **C#**
89+
90+
```cs
91+
public class Solution {
92+
public int RangeBitwiseAnd(int left, int right) {
93+
while (left < right)
94+
{
95+
right &= (right - 1);
96+
}
97+
return right;
98+
}
99+
}
52100
```
53101

54102
### **...**
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class Solution {
2+
public:
3+
int rangeBitwiseAnd(int left, int right) {
4+
while (left < right) right &= (right - 1);
5+
return right;
6+
}
7+
};
Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
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)
2+
public int RangeBitwiseAnd(int left, int right) {
3+
while (left < right)
74
{
8-
temp = (temp << 1) + 1;
9-
xor >>= 1;
5+
right &= (right - 1);
106
}
11-
return and & (~temp);
7+
return right;
128
}
139
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
func rangeBitwiseAnd(left int, right int) int {
2+
for left < right {
3+
right &= (right - 1)
4+
}
5+
return right
6+
}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
class Solution {
2-
public int rangeBitwiseAnd(int m, int n) {
3-
while (m < n) {
4-
n &= n - 1;
2+
public int rangeBitwiseAnd(int left, int right) {
3+
while (left < right) {
4+
right &= (right - 1);
55
}
6-
return n;
6+
return right;
77
}
8-
}
8+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class Solution:
2+
def rangeBitwiseAnd(self, left: int, right: int) -> int:
3+
while left < right:
4+
right &= (right - 1)
5+
return right

solution/0600-0699/0699.Falling Squares/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,13 @@ _aa___a
9090
- 线段树的每个叶子节点代表一个长度为 1 的元区间 `[x, x]`
9191
- 对于每个内部节点 `[l, r]`,它的左儿子是 `[l, mid]`,右儿子是 `[mid + 1, r]`, 其中 `mid = ⌊(l + r) / 2⌋` (即向下取整)。
9292

93+
对于本题,线段树节点维护的信息有:
94+
95+
1. 区间中方块的最大高度 v
96+
1. 懒标记 add
97+
98+
另外,由于数轴范围很大,达到 10^8,因此我们采用动态开点。
99+
93100
<!-- tabs:start -->
94101

95102
### **Python3**

0 commit comments

Comments
 (0)