Skip to content

Commit 5ad58d9

Browse files
committed
一刷201
1 parent 703eac5 commit 5ad58d9

File tree

8 files changed

+89
-23
lines changed

8 files changed

+89
-23
lines changed

README.adoc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1433,12 +1433,12 @@ TIP: **公众号的微信号是: `jikerizhi`**。__因为众所周知的原因
14331433
|Medium
14341434
|
14351435

1436-
//|{counter:codes}
1437-
//|{leetcode_base_url}/bitwise-and-of-numbers-range/[201. Bitwise AND of Numbers Range^]
1438-
//|{source_base_url}/_0201_BitwiseANDOfNumbersRange.java[Java]
1439-
//|{doc_base_url}/0201-bitwise-and-of-numbers-range.adoc[题解]
1440-
//|Medium
1441-
//|
1436+
|{counter:codes}
1437+
|{leetcode_base_url}/bitwise-and-of-numbers-range/[201. Bitwise AND of Numbers Range^]
1438+
|{source_base_url}/_0201_BitwiseANDOfNumbersRange.java[Java]
1439+
|{doc_base_url}/0201-bitwise-and-of-numbers-range.adoc[题解]
1440+
|Medium
1441+
|
14421442

14431443
|{counter:codes}
14441444
|{leetcode_base_url}/happy-number/[202. Happy Number^]
Lines changed: 60 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,75 @@
11
[#0201-bitwise-and-of-numbers-range]
2-
= 201. Bitwise AND of Numbers Range
2+
= 201. 数字范围按位与
33

4-
{leetcode}/problems/bitwise-and-of-numbers-range/[LeetCode - Bitwise AND of Numbers Range^]
4+
https://leetcode.cn/problems/bitwise-and-of-numbers-range/[LeetCode - 201. 数字范围按位与 ^]
55

6-
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.
6+
给你两个整数 `left``right` ,表示区间 `[left, right]`,返回此区间内所有数字 *按位与* 的结果(包含 `left``right` 端点)。
77

8-
*Example 1:*
8+
*示例 1:*
99

10-
[subs="verbatim,quotes,macros"]
11-
----
12-
*Input:* [5,7]
13-
*Output:* 4
10+
....
11+
输入:left = 5, right = 7
12+
输出:4
13+
....
1414

15-
----
15+
*示例 2:*
1616

17-
*Example 2:*
17+
....
18+
输入:left = 0, right = 0
19+
输出:0
20+
....
1821

19-
[subs="verbatim,quotes,macros"]
20-
----
21-
*Input:* [0,1]
22-
*Output:* 0
23-
----
22+
*示例 3:*
23+
24+
....
25+
输入:left = 1, right = 2147483647
26+
输出:0
27+
....
28+
29+
*提示:*
30+
31+
* `0 \<= left \<= right \<= 2^31^ - 1`
32+
33+
34+
== 思路分析
2435

36+
当计算 stem:[n & (n - 1)] 时,会把 `n` 最右边的 `1` 编程 `0`。
37+
38+
image::images/0201-10.png[{image_attr}]
39+
40+
image::images/0201-11.png[{image_attr}]
41+
42+
从另外一个角度来看,就是寻找指定范围内所有数字的公共前缀。
43+
44+
image::images/0201-12.png[{image_attr}]
2545

2646
[[src-0201]]
47+
[tabs]
48+
====
49+
一刷::
50+
+
51+
--
2752
[{java_src_attr}]
2853
----
29-
include::{sourcedir}/_0201_BitwiseANDOfNumbersRange.java[tag=answer]
54+
include::{sourcedir}/_0201_BitwiseAndOfNumbersRange.java[tag=answer]
3055
----
56+
--
57+
58+
// 二刷::
59+
// +
60+
// --
61+
// [{java_src_attr}]
62+
// ----
63+
// include::{sourcedir}/_0201_BitwiseAndOfNumbersRange_2.java[tag=answer]
64+
// ----
65+
// --
66+
====
67+
68+
69+
== 参考资料
70+
71+
. https://leetcode.cn/problems/bitwise-and-of-numbers-range/solutions/384938/shu-zi-fan-wei-an-wei-yu-by-leetcode-solution/[201. 数字范围按位与 - 官方题解^]
72+
. https://leetcode.cn/problems/bitwise-and-of-numbers-range/solutions/385466/ju-hao-li-jie-de-wei-yun-suan-si-lu-by-time-limit/[201. 数字范围按位与 - 巨好理解的位运算思路^]
73+
. https://leetcode.cn/problems/bitwise-and-of-numbers-range/solutions/538550/golang-yi-xing-suan-fa-by-endlesscheng-iw6y/[201. 数字范围按位与 - O(1) 写法^]
74+
. https://leetcode.cn/problems/bitwise-and-of-numbers-range/solutions/56903/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by--41/[201. 数字范围按位与 - 详细通俗的思路分析,多解法^]
3175

docs/images/0201-10.png

138 KB
Loading

docs/images/0201-11.png

152 KB
Loading

docs/images/0201-12.png

110 KB
Loading

docs/index.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ include::0199-binary-tree-right-side-view.adoc[leveloffset=+1]
485485

486486
include::0200-number-of-islands.adoc[leveloffset=+1]
487487

488-
// include::0201-bitwise-and-of-numbers-range.adoc[leveloffset=+1]
488+
include::0201-bitwise-and-of-numbers-range.adoc[leveloffset=+1]
489489

490490
include::0202-happy-number.adoc[leveloffset=+1]
491491

logbook/202503.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -958,6 +958,11 @@ endif::[]
958958
|{doc_base_url}/0173-binary-search-tree-iterator.adoc[题解]
959959
|✅ 栈。使用栈模拟递归调用。
960960

961+
|{counter:codes2503}
962+
|{leetcode_base_url}/bitwise-and-of-numbers-range/[201. 数字范围按位与^]
963+
|{doc_base_url}/0201-bitwise-and-of-numbers-range.adoc[题解]
964+
|⭕️ 位运算!暴力解法超时!可以利用 stem:[n&(n-1)] 去掉 `n` 的最后一位 `1`,反复计算,直到范围的左边界为止即可得到答案。
965+
961966
|===
962967

963968
截止目前,本轮练习一共完成 {codes2503} 道题。
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.diguage.algo.leetcode;
2+
3+
public class _0201_BitwiseAndOfNumbersRange {
4+
// tag::answer[]
5+
6+
/**
7+
* @author D瓜哥 · https://www.diguage.com
8+
* @since 2025-06-11 23:15:14
9+
*/
10+
public int rangeBitwiseAnd(int left, int right) {
11+
while (left < right) {
12+
right = right & (right - 1);
13+
}
14+
return right;
15+
}
16+
// end::answer[]
17+
}

0 commit comments

Comments
 (0)