Skip to content

Commit faa3a7c

Browse files
authored
feat: update lc problems (doocs#2166)
1 parent 05d3b19 commit faa3a7c

File tree

21 files changed

+296
-238
lines changed

21 files changed

+296
-238
lines changed

solution/0000-0099/0052.N-Queens II/README.md

+29-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
```python
6767
class Solution:
6868
def totalNQueens(self, n: int) -> int:
69-
def dfs(i):
69+
def dfs(i: int):
7070
if i == n:
7171
nonlocal ans
7272
ans += 1
@@ -184,6 +184,34 @@ func totalNQueens(n int) (ans int) {
184184
}
185185
```
186186

187+
### **TypeScript**
188+
189+
```ts
190+
function totalNQueens(n: number): number {
191+
const cols: boolean[] = Array(10).fill(false);
192+
const dg: boolean[] = Array(20).fill(false);
193+
const udg: boolean[] = Array(20).fill(false);
194+
let ans = 0;
195+
const dfs = (i: number) => {
196+
if (i === n) {
197+
++ans;
198+
return;
199+
}
200+
for (let j = 0; j < n; ++j) {
201+
let [a, b] = [i + j, i - j + n];
202+
if (cols[j] || dg[a] || udg[b]) {
203+
continue;
204+
}
205+
cols[j] = dg[a] = udg[b] = true;
206+
dfs(i + 1);
207+
cols[j] = dg[a] = udg[b] = false;
208+
}
209+
};
210+
dfs(0);
211+
return ans;
212+
}
213+
```
214+
187215
### **...**
188216

189217
```

solution/0000-0099/0052.N-Queens II/README_EN.md

+29-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ The time complexity is $O(n!)$, and the space complexity is $O(n)$. Here, $n$ is
5454
```python
5555
class Solution:
5656
def totalNQueens(self, n: int) -> int:
57-
def dfs(i):
57+
def dfs(i: int):
5858
if i == n:
5959
nonlocal ans
6060
ans += 1
@@ -170,6 +170,34 @@ func totalNQueens(n int) (ans int) {
170170
}
171171
```
172172

173+
### **TypeScript**
174+
175+
```ts
176+
function totalNQueens(n: number): number {
177+
const cols: boolean[] = Array(10).fill(false);
178+
const dg: boolean[] = Array(20).fill(false);
179+
const udg: boolean[] = Array(20).fill(false);
180+
let ans = 0;
181+
const dfs = (i: number) => {
182+
if (i === n) {
183+
++ans;
184+
return;
185+
}
186+
for (let j = 0; j < n; ++j) {
187+
let [a, b] = [i + j, i - j + n];
188+
if (cols[j] || dg[a] || udg[b]) {
189+
continue;
190+
}
191+
cols[j] = dg[a] = udg[b] = true;
192+
dfs(i + 1);
193+
cols[j] = dg[a] = udg[b] = false;
194+
}
195+
};
196+
dfs(0);
197+
return ans;
198+
}
199+
```
200+
173201
### **...**
174202

175203
```
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
class Solution:
2-
def totalNQueens(self, n: int) -> int:
3-
def dfs(i):
4-
if i == n:
5-
nonlocal ans
6-
ans += 1
7-
return
8-
for j in range(n):
9-
a, b = i + j, i - j + n
10-
if cols[j] or dg[a] or udg[b]:
11-
continue
12-
cols[j] = dg[a] = udg[b] = True
13-
dfs(i + 1)
14-
cols[j] = dg[a] = udg[b] = False
15-
16-
cols = [False] * 10
17-
dg = [False] * 20
18-
udg = [False] * 20
19-
ans = 0
20-
dfs(0)
21-
return ans
1+
class Solution:
2+
def totalNQueens(self, n: int) -> int:
3+
def dfs(i: int):
4+
if i == n:
5+
nonlocal ans
6+
ans += 1
7+
return
8+
for j in range(n):
9+
a, b = i + j, i - j + n
10+
if cols[j] or dg[a] or udg[b]:
11+
continue
12+
cols[j] = dg[a] = udg[b] = True
13+
dfs(i + 1)
14+
cols[j] = dg[a] = udg[b] = False
15+
16+
cols = [False] * 10
17+
dg = [False] * 20
18+
udg = [False] * 20
19+
ans = 0
20+
dfs(0)
21+
return ans
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
function totalNQueens(n: number): number {
2+
const cols: boolean[] = Array(10).fill(false);
3+
const dg: boolean[] = Array(20).fill(false);
4+
const udg: boolean[] = Array(20).fill(false);
5+
let ans = 0;
6+
const dfs = (i: number) => {
7+
if (i === n) {
8+
++ans;
9+
return;
10+
}
11+
for (let j = 0; j < n; ++j) {
12+
let [a, b] = [i + j, i - j + n];
13+
if (cols[j] || dg[a] || udg[b]) {
14+
continue;
15+
}
16+
cols[j] = dg[a] = udg[b] = true;
17+
dfs(i + 1);
18+
cols[j] = dg[a] = udg[b] = false;
19+
}
20+
};
21+
dfs(0);
22+
return ans;
23+
}

solution/0000-0099/0063.Unique Paths II/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555

5656
首先初始化 $dp$ 第一列和第一行的所有值,然后遍历其它行和列,有两种情况:
5757

58-
- 若 $obstacleGrid[i][j] = 1$,说明路径数为 $0$,那么 $dp[i][j] = 0
58+
- 若 $obstacleGrid[i][j] = 1$,说明路径数为 $0$,那么 $dp[i][j] = 0$
5959
- 若 ¥ obstacleGrid[i][j] = 0$,则 $dp[i][j] = dp[i - 1][j] + dp[i][j - 1]$。
6060

6161
最后返回 $dp[m - 1][n - 1]$ 即可。

solution/0000-0099/0065.Valid Number/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191

9292
遍历完字符串后,返回 `true`
9393

94-
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为字符串长度
94+
时间复杂度 $O(n)$,其中 $n$ 为字符串长度。空间复杂度 $O(1)$。
9595

9696
<!-- tabs:start -->
9797

solution/0000-0099/0069.Sqrt(x)/README.md

+55-62
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,15 @@
4141

4242
<!-- 这里可写通用的实现逻辑 -->
4343

44-
二分查找。
44+
**方法一:二分查找**
45+
46+
我们定义二分查找的左边界 $l = 0$,右边界 $r = x$,然后在 $[l, r]$ 范围内查找平方根。
47+
48+
在每一步查找中,我们找出中间值 $mid = (l + r + 1) / 2$,如果 $mid > x / mid$,说明平方根在 $[l, mid - 1]$ 范围内,我们令 $r = mid - 1$;否则说明平方根在 $[mid, r]$ 范围内,我们令 $l = mid$。
49+
50+
查找结束后,返回 $l$ 即可。
51+
52+
时间复杂度 $O(\log x)$,空间复杂度 $O(1)$。
4553

4654
<!-- tabs:start -->
4755

@@ -52,15 +60,14 @@
5260
```python
5361
class Solution:
5462
def mySqrt(self, x: int) -> int:
55-
left, right = 0, x
56-
while left < right:
57-
mid = (left + right + 1) >> 1
58-
# mid*mid <= x
59-
if mid <= x // mid:
60-
left = mid
63+
l, r = 0, x
64+
while l < r:
65+
mid = (l + r + 1) >> 1
66+
if mid > x // mid:
67+
r = mid - 1
6168
else:
62-
right = mid - 1
63-
return left
69+
l = mid
70+
return l
6471
```
6572

6673
### **Java**
@@ -70,17 +77,16 @@ class Solution:
7077
```java
7178
class Solution {
7279
public int mySqrt(int x) {
73-
int left = 0, right = x;
74-
while (left < right) {
75-
int mid = (left + right + 1) >>> 1;
76-
if (mid <= x / mid) {
77-
// mid*mid <= x
78-
left = mid;
80+
int l = 0, r = x;
81+
while (l < r) {
82+
int mid = (l + r + 1) >>> 1;
83+
if (mid > x / mid) {
84+
r = mid - 1;
7985
} else {
80-
right = mid - 1;
86+
l = mid;
8187
}
8288
}
83-
return left;
89+
return l;
8490
}
8591
}
8692
```
@@ -91,15 +97,16 @@ class Solution {
9197
class Solution {
9298
public:
9399
int mySqrt(int x) {
94-
long long left = 0, right = x;
95-
while (left < right) {
96-
long long mid = left + ((right - left + 1) >> 1);
97-
if (mid <= x / mid)
98-
left = mid;
99-
else
100-
right = mid - 1;
100+
int l = 0, r = x;
101+
while (l < r) {
102+
int mid = (l + r + 1ll) >> 1;
103+
if (mid > x / mid) {
104+
r = mid - 1;
105+
} else {
106+
l = mid;
107+
}
101108
}
102-
return (int) left;
109+
return l;
103110
}
104111
};
105112
```
@@ -108,16 +115,7 @@ public:
108115
109116
```go
110117
func mySqrt(x int) int {
111-
left, right := 0, x
112-
for left < right {
113-
mid := left + (right-left+1)>>1
114-
if mid <= x/mid {
115-
left = mid
116-
} else {
117-
right = mid - 1
118-
}
119-
}
120-
return left
118+
return sort.Search(x+1, func(i int) bool { return i*i > x }) - 1
121119
}
122120
```
123121

@@ -129,17 +127,16 @@ func mySqrt(x int) int {
129127
* @return {number}
130128
*/
131129
var mySqrt = function (x) {
132-
let left = 0;
133-
let right = x;
134-
while (left < right) {
135-
const mid = (left + right + 1) >>> 1;
136-
if (mid <= x / mid) {
137-
left = mid;
130+
let [l, r] = [0, x];
131+
while (l < r) {
132+
const mid = (l + r + 1) >> 1;
133+
if (mid > x / mid) {
134+
r = mid - 1;
138135
} else {
139-
right = mid - 1;
136+
l = mid;
140137
}
141138
}
142-
return left;
139+
return l;
143140
};
144141
```
145142

@@ -148,20 +145,16 @@ var mySqrt = function (x) {
148145
```cs
149146
public class Solution {
150147
public int MySqrt(int x) {
151-
int left = 0, right = x;
152-
while (left < right)
153-
{
154-
int mid = left + right + 1 >> 1;
155-
if (mid <= x / mid)
156-
{
157-
left = mid;
158-
}
159-
else
160-
{
161-
right = mid - 1;
148+
int l = 0, r = x;
149+
while (l < r) {
150+
int mid = (l + r + 1) >>> 1;
151+
if (mid > x / mid) {
152+
r = mid - 1;
153+
} else {
154+
l = mid;
162155
}
163156
}
164-
return left;
157+
return l;
165158
}
166159
}
167160
```
@@ -171,19 +164,19 @@ public class Solution {
171164
```rust
172165
impl Solution {
173166
pub fn my_sqrt(x: i32) -> i32 {
174-
if x < 2 {
175-
return x;
176-
}
177-
let mut l = 1;
178-
let mut r = x / 2;
167+
let mut l = 0;
168+
let mut r = x;
169+
179170
while l < r {
180-
let mid = (l + r + 1) >> 1;
181-
if x / mid < mid {
171+
let mid = (l + r + 1) / 2;
172+
173+
if mid > x / mid {
182174
r = mid - 1;
183175
} else {
184176
l = mid;
185177
}
186178
}
179+
187180
l
188181
}
189182
}

0 commit comments

Comments
 (0)