Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 67bc72b

Browse files
Update Readme.md
1 parent f1a4f15 commit 67bc72b

File tree

1 file changed

+1
-1
lines changed
  • Binary_Search/3677.Count-Binary-Palindromic-Numbers

1 file changed

+1
-1
lines changed

‎Binary_Search/3677.Count-Binary-Palindromic-Numbers/Readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
假设n的二进制长度是maxLen,那么对于任何1<=L<maxLen的二进制回文数自然都符合"小于n"的条件。这些二进制回文数与它的"前半段"有一一对应的关系。也就是说,我们遍历所有的"前半段",就能构造出所有长度为L的二进制回文数。举个例子,如果L=8,它一半的长度h=4,那么我们遍历1000\~1111,将它们各自翻转拼接,就对应了所有长度为8的二进制回文数。注意,如果L=7,它一半的长度h也是4,我们同样遍历1000~1111,将它们各自翻转拼接(但是有一个中轴位),它们依然能对应所有长度为7的二进制回文数。
44

5-
接下来考虑L=maxLen,且"小于等于n"的二进制回文数。比较简单的处理就是用二分搜值。计算`h=(L+1)/2`,然后"前半段"有下限`mn=1<<(h-1)`,上限是`mx=(1<<h)-1`,我们二分搜值找到最大的、小于等于n的数m,那么`m-mn+1`就是答案。但是注意,存在并没有解的可能。比如h=1时,就有`mn>mx`的情况。
5+
接下来考虑L=maxLen,且"小于等于n"的二进制回文数。比较简单的处理就是用二分搜值。计算`h=(L+1)/2`,然后"前半段"有下限`mn=1<<(h-1)`,上限是`mx=(1<<h)-1`,我们二分搜值找到最大的、小于等于n的数m,那么`m-mn+1`就是答案。但是注意,存在并没有解的可能。比如h=1时,就有`mn>mx`的情况,所以需要对收敛的解做二次验证
66

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /