42
42
43
43
** 方法一:脑筋急转弯**
44
44
45
- 我们注意到,字符串 $s$ 的长度不超过 $1000$,所以字符串 $s$ 能表示不超过 $100 $ 个 $10$ 位的二进制整数 ,因此,我们可以粗略地估算, 如果 $n \gt 1023 $,那么 $s$ 肯定不能表示 $[ 1, n] $ 范围内的所有整数的二进制表示。
45
+ 我们注意到,字符串 $s$ 的长度不超过 $1000$,所以字符串 $s$ 能表示不超过 $1000 $ 个 二进制整数 ,因此,如果 $n \gt 1000 $,那么 $s$ 肯定不能表示 $[ 1,.. n] $ 范围内的所有整数的二进制表示。
46
46
47
47
另外,对于一个整数 $x$,如果 $x$ 的二进制表示是 $s$ 的子串,那么 $\lfloor x / 2 \rfloor$ 的二进制表示也是 $s$ 的子串。因此,我们只需要判断 $[ \lfloor n / 2 \rfloor + 1,.. n] $ 范围内的整数的二进制表示是否是 $s$ 的子串即可。
48
48
57
57
``` python
58
58
class Solution :
59
59
def queryString (self , s : str , n : int ) -> bool :
60
- if n > 1023 :
60
+ if n > 1000 :
61
61
return False
62
62
return all (bin (i)[2 :] in s for i in range (n, n // 2 , - 1 ))
63
63
```
@@ -69,7 +69,7 @@ class Solution:
69
69
``` java
70
70
class Solution {
71
71
public boolean queryString (String s , int n ) {
72
- if (n > 1023 ) {
72
+ if (n > 1000 ) {
73
73
return false ;
74
74
}
75
75
for (int i = n; i > n / 2 ; i-- ) {
@@ -88,7 +88,7 @@ class Solution {
88
88
class Solution {
89
89
public:
90
90
bool queryString(string s, int n) {
91
- if (n > 1023 ) {
91
+ if (n > 1000 ) {
92
92
return false;
93
93
}
94
94
for (int i = n; i > n / 2; --i) {
@@ -107,7 +107,7 @@ public:
107
107
108
108
```go
109
109
func queryString(s string, n int) bool {
110
- if n > 1023 {
110
+ if n > 1000 {
111
111
return false
112
112
}
113
113
for i := n; i > n/2; i-- {
@@ -123,7 +123,7 @@ func queryString(s string, n int) bool {
123
123
124
124
``` ts
125
125
function queryString(s : string , n : number ): boolean {
126
- if (n > 1023 ) {
126
+ if (n > 1000 ) {
127
127
return false ;
128
128
}
129
129
for (let i = n ; i > n / 2 ; -- i ) {
0 commit comments